Working on scripts

This commit is contained in:
Vladislav Khorev committed 2026-05-17 14:39:02 +03:00
1 parent c086fe1ef0
commit 4044acefb2
35 files changed
+107190 -185

No files matched your search

+136 -16
View File
@@ -147,6 +147,18 @@ namespace ZL
renderer.shaderManager.AddShaderFromFiles("darklands_fog", "resources/shaders/darklands_fog.vertex", "resources/shaders/darklands_fog_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("darklands_fog_skinning", "resources/shaders/darklands_fog_skinning.vertex", "resources/shaders/darklands_fog_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("darklands_flash", "resources/shaders/default.vertex", "resources/shaders/darklands_flash_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneFade", "resources/shaders/default.vertex", "resources/shaders/cutscene_fade_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneBlack", "resources/shaders/default.vertex", "resources/shaders/cutscene_black_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("shadow_depth", "resources/shaders/shadow_depth.vertex", "resources/shaders/shadow_depth_web.fragment", CONST_ZIP_FILE);
std::cout << "Load resurces step 12x1" << std::endl;
renderer.shaderManager.AddShaderFromFiles("shadow_depth_skinning", "resources/shaders/shadow_depth_skinning.vertex", "resources/shaders/shadow_depth_web.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("default_shadow", "resources/shaders/default_shadow.vertex", "resources/shaders/default_shadow_web.fragment", CONST_ZIP_FILE);
std::cout << "Load resurces step 12x3" << std::endl;
renderer.shaderManager.AddShaderFromFiles("skinning_shadow", "resources/shaders/skinning_shadow.vertex", "resources/shaders/default_shadow_web.fragment", CONST_ZIP_FILE);
std::cout << "Load resurces step 12x4" << std::endl;
renderer.shaderManager.AddShaderFromFiles("fog_shadow", "resources/shaders/fog_shadow.vertex", "resources/shaders/fog_shadow_web.fragment", CONST_ZIP_FILE);
std::cout << "Load resurces step 12x5" << std::endl;
renderer.shaderManager.AddShaderFromFiles("fog_skinning_shadow", "resources/shaders/fog_skinning_shadow.vertex", "resources/shaders/fog_shadow_web.fragment", CONST_ZIP_FILE);
#else
renderer.shaderManager.AddShaderFromFiles("env_sky", "resources/shaders/env_sky.vertex", "resources/shaders/env_sky_desktop.fragment", CONST_ZIP_FILE);
@@ -161,6 +173,15 @@ namespace ZL
renderer.shaderManager.AddShaderFromFiles("darklands_fog", "resources/shaders/darklands_fog.vertex", "resources/shaders/darklands_fog_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("darklands_fog_skinning", "resources/shaders/darklands_fog_skinning.vertex", "resources/shaders/darklands_fog_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("darklands_flash", "resources/shaders/default.vertex", "resources/shaders/darklands_flash_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneFade", "resources/shaders/default.vertex", "resources/shaders/cutscene_fade_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneBlack", "resources/shaders/default.vertex", "resources/shaders/cutscene_black_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("shadow_depth", "resources/shaders/shadow_depth.vertex", "resources/shaders/shadow_depth_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("shadow_depth_skinning", "resources/shaders/shadow_depth_skinning.vertex", "resources/shaders/shadow_depth_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("default_shadow", "resources/shaders/default_shadow.vertex", "resources/shaders/default_shadow_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("skinning_shadow", "resources/shaders/skinning_shadow.vertex", "resources/shaders/default_shadow_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("fog_shadow", "resources/shaders/fog_shadow.vertex", "resources/shaders/fog_shadow_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("fog_skinning_shadow", "resources/shaders/fog_skinning_shadow.vertex", "resources/shaders/fog_shadow_desktop.fragment", CONST_ZIP_FILE);
#endif
std::cout << "Load resurces step 4" << std::endl;
@@ -201,19 +222,29 @@ namespace ZL
locations["uni_interior"] = std::make_shared<Location>(renderer, inventory);
locations["uni_interior"]->setup(uniInteriorParams);
locations["uni_interior"]->scriptEngine.setGlobalStore(&globalInts);
locations["uni_interior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
if (locations["uni_interior"]->player)
locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
LocationSetup uniExteriorParams = uniInteriorParams;
uniExteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects2.json";
uniExteriorParams.interactiveObjectsJsonPath = "";
uniExteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_exterior.json";
uniExteriorParams.interactiveObjectsJsonPath = "resources/config2/interactive_objects_uni_exterior.json";
//uniExteriorParams.navigationJsonPaths = {"resources/config2/navigation2.json"};
uniExteriorParams.navigationJsonPaths = { "resources/w/nav_uni_exterior.txt" };
uniExteriorParams.teleportsJsonPath = "resources/config2/teleports2.json";
uniExteriorParams.triggerZonesJsonPath = "resources/config2/trigger_zones2.json";
uniExteriorParams.scriptPath = "resources/start2.lua";
uniExteriorParams.teleportsJsonPath = "resources/config2/teleports_uni_exterior.json";
uniExteriorParams.triggerZonesJsonPath = "resources/config2/trigger_zones_uni_exterior.json";
uniExteriorParams.scriptPath = "resources/start_uni_exterior.lua";
uniExteriorParams.playerPosition = Eigen::Vector3f(5, 0, -18.4);
uniExteriorParams.npcsJsonPath = "resources/config2/npcs2.json";
uniExteriorParams.npcsJsonPath = "resources/config2/npcs_uni_exterior.json";
uniExteriorParams.dialoguesJsonPath = "resources/dialogue/uni_exterior_dialogues.json";
locations["uni_exterior"] = std::make_shared<Location>(renderer, inventory);
locations["uni_exterior"]->setup(uniExteriorParams);
locations["uni_exterior"]->scriptEngine.setGlobalStore(&globalInts);
locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
if (locations["uni_exterior"]->player)
locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
LocationSetup params_dorm;
params_dorm.gameObjectsJsonPath = "resources/config2/gameobjects_dorm.json";
@@ -230,6 +261,10 @@ namespace ZL
locations["location_dorm"] = std::make_shared<Location>(renderer, inventory);
locations["location_dorm"]->setup(params_dorm);
locations["location_dorm"]->scriptEngine.setGlobalStore(&globalInts);
locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
if (locations["location_dorm"]->player)
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
// Teleport callbacks: destination name and position come from the teleport zone data.
auto teleportCallback = [this](const std::string& destName, const Eigen::Vector3f& destPos, float destRotY) {
@@ -239,6 +274,8 @@ namespace ZL
std::cerr << "[TELEPORT] Unknown destination location: " << destName << std::endl;
return;
}
if (currentLocation)
currentLocation->scriptEngine.callLocationExitCallback();
currentLocation = it->second;
if (currentLocation->player) {
currentLocation->player->position = destPos;
@@ -247,7 +284,7 @@ namespace ZL
currentLocation->player->targetFacingAngle = destRotY;
}
currentLocation->cameraAzimuth = destRotY;
currentLocation->scriptEngine.callLocationEnterCallback();
};
locations["uni_exterior"]->onTeleport = teleportCallback;
@@ -255,9 +292,10 @@ namespace ZL
locations["location_dorm"]->onTeleport = teleportCallback;
currentLocation = locations["location_dorm"];
currentLocation->scriptEngine.callLocationEnterCallback();
std::cout << "Load resurces step 5" << std::endl;
/*
std::cout << "Load resurces step 12" << std::endl;
// Shadow mapping shaders
@@ -287,7 +325,7 @@ namespace ZL
renderer.shaderManager.AddShaderFromFiles("fog_skinning_shadow", "resources/shaders/fog_skinning_shadow.vertex", "resources/shaders/fog_shadow_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneFade", "resources/shaders/default.vertex", "resources/shaders/cutscene_fade_desktop.fragment", CONST_ZIP_FILE);
renderer.shaderManager.AddShaderFromFiles("cutsceneBlack", "resources/shaders/default.vertex", "resources/shaders/cutscene_black_desktop.fragment", CONST_ZIP_FILE);
#endif
#endif*/
std::cout << "Load resurces step 13" << std::endl;
@@ -349,7 +387,10 @@ namespace ZL
{
if (currentLocation)
{
if (currentLocation->isDarklands) {
// Sync global darklands flag so Location's raycast and draw functions see it.
currentLocation->isDarklands = isDarklands;
if (isDarklands) {
currentLocation->drawGameDarklands();
CheckGlError(__FILE__, __LINE__);
}
@@ -370,6 +411,7 @@ namespace ZL
// ??? Main menu???
}
drawUI();
drawDarklandsFlash();
}
CheckGlError(__FILE__, __LINE__);
}
@@ -429,6 +471,8 @@ namespace ZL
lastTickCount = newTickCount;
updateDarklandsFlash(delta);
if (currentLocation)
{
currentLocation->update(delta);
@@ -543,8 +587,7 @@ namespace ZL
if (event.type == SDL_KEYDOWN && event.key.repeat == 0) {
switch (event.key.keysym.sym) {
case SDLK_0:
if (currentLocation)
currentLocation->startDarklandsTransition();
startDarklandsTransition();
break;
case SDLK_1:
//if (audioPlayer) audioPlayer->playSoundAsync("audio/background.wav");
@@ -577,15 +620,15 @@ namespace ZL
case SDLK_o:
//y = y + 0.002;
//currentLocation->player->hp = 200;
currentLocation->npcs[0]->walkSpeed += 0.01f;
std::cout << "Walk speed: " << currentLocation->npcs[0]->walkSpeed << std::endl;
//currentLocation->npcs[0]->walkSpeed += 0.01f;
//std::cout << "Walk speed: " << currentLocation->npcs[0]->walkSpeed << std::endl;
break;
case SDLK_k:
//y = y - 0.002;
std::cout << "Player pos: " << currentLocation->player->position.transpose() << std::endl;
currentLocation->npcs[0]->walkSpeed -= 0.01f;
std::cout << "Walk speed: " << currentLocation->npcs[0]->walkSpeed << std::endl;
//currentLocation->npcs[0]->walkSpeed -= 0.01f;
//std::cout << "Walk speed: " << currentLocation->npcs[0]->walkSpeed << std::endl;
break;
case SDLK_p:
@@ -865,4 +908,81 @@ namespace ZL
}
}
bool Game::startDarklandsTransition()
{
if (darklandsFlashActive) return false;
darklandsFlashActive = true;
darklandsFlashFadingIn = true;
darklandsFlashAlpha = 0.0f;
return true;
}
void Game::updateDarklandsFlash(int64_t deltaMs)
{
if (!darklandsFlashActive) return;
static constexpr float kFadeDurationMs = 500.0f;
const float step = static_cast<float>(deltaMs) / kFadeDurationMs;
if (darklandsFlashFadingIn) {
darklandsFlashAlpha = min(darklandsFlashAlpha + step, 1.0f);
if (darklandsFlashAlpha >= 1.0f) {
isDarklands = !isDarklands;
if (currentLocation) {
if (isDarklands)
currentLocation->scriptEngine.callDarklandsEnterCallback();
else
currentLocation->scriptEngine.callDarklandsExitCallback();
}
darklandsFlashFadingIn = false;
}
} else {
darklandsFlashAlpha = max(darklandsFlashAlpha - step, 0.0f);
if (darklandsFlashAlpha <= 0.0f) {
darklandsFlashAlpha = 0.0f;
darklandsFlashActive = false;
}
}
}
void Game::drawDarklandsFlash()
{
if (darklandsFlashAlpha <= 0.001f) return;
const float W = static_cast<float>(Environment::projectionWidth);
const float H = static_cast<float>(Environment::projectionHeight);
if (darklandsFlashQuadW != W || darklandsFlashQuadH != H) {
darklandsFlashQuadW = W;
darklandsFlashQuadH = H;
VertexDataStruct data;
data.PositionData = {
{0.f, 0.f, 0.f}, {0.f, H, 0.f}, {W, H, 0.f},
{W, H, 0.f}, {W, 0.f, 0.f}, {0.f, 0.f, 0.f}
};
data.TexCoordData = {
{0.f, 0.f}, {0.f, 1.f}, {1.f, 1.f},
{1.f, 1.f}, {1.f, 0.f}, {0.f, 0.f}
};
darklandsFlashQuad.data = std::move(data);
darklandsFlashQuad.RefreshVBO();
}
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
renderer.shaderManager.PushShader("darklands_flash");
renderer.PushProjectionMatrix(0.0f, W, 0.0f, H, -10.0f, 10.0f);
renderer.PushMatrix();
renderer.LoadIdentity();
renderer.RenderUniform1f("uAlpha", darklandsFlashAlpha);
renderer.DrawVertexRenderStruct(darklandsFlashQuad);
renderer.PopMatrix();
renderer.PopProjectionMatrix();
renderer.shaderManager.PopShader();
glDisable(GL_BLEND);
}
} // namespace ZL