}
void MapState::RunTrigger(Trigger &trigger) {
- // TODO: run trigger script
- if (trigger.map) {
- ctrl->PushState(new ColorFade(this, 0, 500, true));
- ctrl->PushState(new TransitionState(this, trigger.map, trigger.target));
- ColorFade *fadeOut(new ColorFade(this, 0, 500, false));
- fadeOut->SetLeadOutTime(500);
- ctrl->PushState(fadeOut);
- }
+ if (!trigger.HasScript()) return;
+ runner.Run(*this, trigger.GetScript());
}
void MapState::UpdateFollower(Entity &e) {
map = m;
for (Entity *e(m->EntitiesBegin()), *end(m->EntitiesEnd()); e != end; ++e) {
entities.push_back(e);
+ e->ResetPosition(map->Tileset()->Size());
}
for (Entity *e(controlled); e; e = e->Follower()) {
entities.push_back(e);
return lhs->Position().Y() < rhs->Position().Y();
}
+
+void MapState::HandleSyscall(common::ScriptRunner &r) {
+ switch (r.Integer0()) {
+ case TRANSITION: {
+ ctrl->PushState(new ColorFade(this, 0, 500, true));
+ ctrl->PushState(new TransitionState(this, reinterpret_cast<Map *>(r.Address0()), r.Vector0()));
+ ColorFade *fadeOut(new ColorFade(this, 0, 500, false));
+ fadeOut->SetLeadOutTime(500);
+ ctrl->PushState(fadeOut);
+ break;
+ }
+ }
+}
+
}