- //Check if door animation is complete
- if(sprite->animation_done()) {
- sprite->set_action("normal");
- GameSession::current()->respawn(target_sector, target_spawnpoint);
+ switch (state) {
+ case CLOSED:
+ break;
+ case OPENING:
+ // if door has finished opening, start timer and keep door open
+ if(sprite->animation_done()) {
+ state = OPEN;
+ sprite->set_action("open");
+ stay_open_timer.start(1.0);
+ }
+ break;
+ case OPEN:
+ // if door was open long enough, start closing it
+ if (stay_open_timer.check()) {
+ state = CLOSING;
+ sprite->set_action("closing", 1);
+ }
+ break;
+ case CLOSING:
+ // if door has finished closing, keep it shut
+ if(sprite->animation_done()) {
+ state = CLOSED;
+ sprite->set_action("closed");
+ }
+ break;