Skip to content

Commit

Permalink
Halls of Irdorath triggers
Browse files Browse the repository at this point in the history
  • Loading branch information
Try committed Mar 14, 2024
1 parent 2ff01b2 commit 20af370
Show file tree
Hide file tree
Showing 7 changed files with 117 additions and 87 deletions.
13 changes: 9 additions & 4 deletions game/world/triggers/codemaster.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
#include "codemaster.h"

#include <Tempest/Log>

#include "world/world.h"
#include "game/serialize.h"

CodeMaster::CodeMaster(Vob* parent, World &world, const zenkit::VCodeMaster& cm, Flags flags)
:AbstractTrigger(parent,world,cm,flags), keys(cm.slaves.size()) {
target = cm.target;
slaves = cm.slaves;
ordered = cm.ordered;
target = cm.target;
slaves = cm.slaves;
ordered = cm.ordered;
firstFalseIsFailure = cm.first_false_is_failure;
failureTarget = cm.failure_target;
failureTarget = cm.failure_target;
untriggeredCancels = cm.untriggered_cancels;
if(untriggeredCancels)
Tempest::Log::d("zCCodeMaster::untriggeredCancels is not implemented. Vob: \"", vobName, "\"");
}

void CodeMaster::onTrigger(const TriggerEvent &evt) {
Expand Down
5 changes: 3 additions & 2 deletions game/world/triggers/codemaster.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ class CodeMaster : public AbstractTrigger {

std::vector<bool> keys;
std::vector<std::string> slaves;
bool ordered;
bool firstFalseIsFailure;
bool ordered = false;
bool firstFalseIsFailure = false;
std::string failureTarget;
bool untriggeredCancels = false;
};

25 changes: 14 additions & 11 deletions game/world/triggers/cscamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ CsCamera::CsCamera(Vob* parent, World& world, const zenkit::VCutsceneCamera& cam
return;
}

duration = cam.total_duration;
delay = cam.auto_untrigger_last_delay;
durationF = cam.total_duration;
duration = uint64_t(cam.total_duration * 1000.f);
delay = uint64_t(cam.auto_untrigger_last_delay * 1000.f);
playerMovable = cam.auto_player_movable;

for(auto& f : cam.trajectory_frames) {
Expand Down Expand Up @@ -55,13 +56,13 @@ CsCamera::CsCamera(Vob* parent, World& world, const zenkit::VCutsceneCamera& cam
if(spl->keyframe.front().time!=0) {
Log::e("CsCamera: \"",cam.vob_name,"\" - invalid first frame");
}
if(spl->keyframe.back().time!=duration) {
if(spl->keyframe.back().time!=durationF) {
Log::e("CsCamera: \"",cam.vob_name,"\" - invalid sequence duration");
}

const float slow = 0;
const float linear = duration;
const float fast = 2 * duration;
const float linear = durationF;
const float fast = 2 * durationF;

zenkit::CameraMotion mType0, mType1;
if(spl == &posSpline) {
Expand All @@ -87,8 +88,8 @@ CsCamera::CsCamera(Vob* parent, World& world, const zenkit::VCutsceneCamera& cam
d1 = slow;
}

spl->c[0] = -2*duration + d0 + d1;
spl->c[1] = 3*duration - 2*d0 - d1;
spl->c[0] = -2*durationF + d0 + d1;
spl->c[1] = 3*durationF - 2*d0 - d1;
spl->c[2] = d0;
}
}
Expand All @@ -102,7 +103,9 @@ void CsCamera::onTrigger(const TriggerEvent& evt) {
return;

if(auto cs = world.currentCs()) {
cs->onUntrigger(evt);
if(cs->time!=0)
cs->onUntrigger(evt); else
return;
}

auto& camera = world.gameSession().camera();
Expand Down Expand Up @@ -138,7 +141,7 @@ void CsCamera::onUntrigger(const TriggerEvent& evt) {
}

void CsCamera::tick(uint64_t dt) {
time += float(dt)/1000.f;
time += dt;

if(time>duration+delay) {
TriggerEvent e("","",TriggerEvent::T_Untrigger);
Expand All @@ -162,7 +165,7 @@ Vec3 CsCamera::position() {
if(posSpline.size()==1) {
pos = posSpline.keyframe[0].c[3];
} else {
posSpline.setSplTime(time/duration);
posSpline.setSplTime(float(time)/float(duration));
pos = posSpline.position();
}
return pos;
Expand All @@ -174,7 +177,7 @@ PointF CsCamera::spin(Tempest::Vec3& d) {
else if(targetSpline.size()==1)
d = targetSpline.keyframe[0].c[3] - d;
else if(targetSpline.size()>1) {
targetSpline.setSplTime(time/duration);
targetSpline.setSplTime(float(time)/float(duration));
d = targetSpline.position() - d;
}

Expand Down
15 changes: 8 additions & 7 deletions game/world/triggers/cscamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,13 @@ class CsCamera : public AbstractTrigger {
auto position() -> Tempest::Vec3;
auto spin(Tempest::Vec3& d) -> Tempest::PointF;

bool active = false;
bool godMode = false;
float duration = 0;
float delay = 0;
float time = 0;
KbSpline posSpline = {};
KbSpline targetSpline = {};
bool active = false;
bool godMode = false;
bool playerMovable = false;
float durationF = 0;
uint64_t duration = 0;
uint64_t delay = 0;
uint64_t time = 0;
KbSpline posSpline = {};
KbSpline targetSpline = {};
};
12 changes: 6 additions & 6 deletions game/world/triggers/messagefilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,29 @@ void MessageFilter::onUntrigger(const TriggerEvent&) {

void MessageFilter::exec(zenkit::MessageFilterAction eval) {
switch(eval) {
case zenkit::MessageFilterAction::none:
case zenkit::MessageFilterAction::NONE:
break;
case zenkit::MessageFilterAction::trigger: {
case zenkit::MessageFilterAction::TRIGGER: {
TriggerEvent e(target,vobName,TriggerEvent::T_Trigger);
world.execTriggerEvent(e);
break;
}
case zenkit::MessageFilterAction::untrigger: {
case zenkit::MessageFilterAction::UNTRIGGER: {
TriggerEvent e(target,vobName,TriggerEvent::T_Untrigger);
world.execTriggerEvent(e);
break;
}
case zenkit::MessageFilterAction::enable: {
case zenkit::MessageFilterAction::ENABLE: {
TriggerEvent e(target,vobName,TriggerEvent::T_Enable);
world.execTriggerEvent(e);
break;
}
case zenkit::MessageFilterAction::disable:{
case zenkit::MessageFilterAction::DISABLE:{
TriggerEvent e(target,vobName,TriggerEvent::T_Disable);
world.execTriggerEvent(e);
break;
}
case zenkit::MessageFilterAction::toggle:{
case zenkit::MessageFilterAction::TOGGLE:{
TriggerEvent e(target,vobName,TriggerEvent::T_ToggleEnable);
world.execTriggerEvent(e);
break;
Expand Down

0 comments on commit 20af370

Please sign in to comment.