OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
codemaster.cpp
Go to the documentation of this file.
1#include "codemaster.h"
2
3#include <Tempest/Log>
4
5#include "world/world.h"
6#include "game/serialize.h"
7
8CodeMaster::CodeMaster(Vob* parent, World &world, const zenkit::VCodeMaster& cm, Flags flags)
9 :AbstractTrigger(parent,world,cm,flags), keys(cm.slaves.size()) {
10 target = cm.target;
11 slaves = cm.slaves;
12 ordered = cm.ordered;
13 firstFalseIsFailure = cm.first_false_is_failure;
14 failureTarget = cm.failure_target;
15 untriggeredCancels = cm.untriggered_cancels;
16 if(untriggeredCancels)
17 Tempest::Log::d("zCCodeMaster::untriggeredCancels is not implemented. Vob: \"", vobName, "\"");
18 }
19
21 size_t i = 0;
22 for(i=0;i<keys.size();++i)
23 if(slaves[i]==evt.emitter)
24 break;
25 if(i==keys.size())
26 return;
27
28 if(!ordered || count==i)
29 keys[i] = true;
30 else if(firstFalseIsFailure) {
31 onFailure();
32 return;
33 }
34 ++count;
35 if(count<keys.size())
36 return;
37
38 if(std::find(keys.begin(),keys.end(),false)==keys.end())
39 onSuccess();
40 else if(ordered)
41 onFailure();
42 }
43
44void CodeMaster::save(Serialize& fout) const {
46 fout.write(keys,count);
47 }
48
49void CodeMaster::load(Serialize& fin) {
51 fin.read(keys);
52 if(fin.version()>48)
53 fin.read(count);
54 }
55
56void CodeMaster::onFailure() {
57 zeroState();
58 if(!failureTarget.empty()) {
61 }
62 }
63
64void CodeMaster::onSuccess() {
65 zeroState();
66 if(!target.empty()) {
69 }
70 }
71
72void CodeMaster::zeroState() {
73 for(size_t i=0;i<keys.size();++i)
74 keys[i] = false;
75 count = 0;
76 }
void load(Serialize &fin) override
void save(Serialize &fout) const override
std::string vobName
CodeMaster(Vob *parent, World &world, const zenkit::VCodeMaster &data, Flags flags)
Definition codemaster.cpp:8
void onTrigger(const TriggerEvent &evt) override
void write(const Arg &... a)
Definition serialize.h:76
uint16_t version() const
Definition serialize.h:51
void read(Arg &... a)
Definition serialize.h:81
std::string emitter
Definition vob.h:11
Flags
Definition vob.h:13
World & world
Definition vob.h:45
Definition world.h:31
void triggerEvent(const TriggerEvent &e)
Definition world.cpp:495