bool EventsList::Contains(const gd::BaseEvent & eventToSearch, bool recursive) const { for (std::size_t i = 0;i<GetEventsCount();++i) { if ( &GetEvent(i) == &eventToSearch) return true; if ( recursive && GetEvent(i).CanHaveSubEvents() && GetEvent(i).GetSubEvents().Contains(eventToSearch) ) return true; } return false; }
void MapScene_InputKey(InputKey key, InputKeyState state) { if(GetPlayer() == NULL) return; if(GetCurrentInterpreter() == NULL) return; PartyMember *player = GetPlayer(); Interpreter *interpreter = GetCurrentInterpreter(); int playerNextX = player->x; int playerNextY = player->y; int playerMapX = player->x / MAPCHIP_W; int playerMapY = player->y / MAPCHIP_H; if(!interpreter->running){ Event *touchedEvent = NULL; if(state == KEY_STATE_PRESS){ switch(key){ case KEY_LEFT: playerNextX -= 3; player->dirX = -1; player->angle = CHARA_ANGLE_LEFT; touchedEvent = CheckTouchEvent(player->x, player->y, -1, 0); break; case KEY_RIGHT: playerNextX += 3; player->dirX = 1; player->angle = CHARA_ANGLE_RIGHT; touchedEvent = CheckTouchEvent(player->x, player->y, 1, 0); break; case KEY_UP: playerNextY -= 3; player->dirY = -1; player->angle = CHARA_ANGLE_UP; touchedEvent = CheckTouchEvent(player->x, player->y, 0, -1); break; case KEY_DOWN: playerNextY += 3; player->dirY = 1; player->angle = CHARA_ANGLE_DOWN; touchedEvent = CheckTouchEvent(player->x, player->y, 0, 1); break; } } if(touchedEvent != NULL){ Interpreter_Setup(interpreter, touchedEvent->onTouchScript); } int chipID = GetChipIDAtPos((playerNextX + MAPCHIP_W / 2) / MAPCHIP_W, (playerNextY + MAPCHIP_H / 2) / MAPCHIP_H); if(!IsChipIDPassable(chipID)){ playerNextX = player->x; playerNextY = player->y; } bool touchedToEvent = false; for(int i = 0; i < GetEventsCount(); i++){ if(GetEvent(i)->image != -1 && DistanceToEvent(playerNextX, playerNextY, i) < MAPCHIP_W / 2){ touchedToEvent = true; break; } } if(!touchedToEvent){ player->x = playerNextX; player->y = playerNextY; } } if(key == KEY_DECIDE && state == KEY_STATE_DOWN && !interpreter->running){ Event *event = CheckExamineEvent(player->x, player->y, player->angle); if(event != NULL){ Interpreter_Setup(interpreter, event->onExamineScript); } } }