void Game_Character::MoveDown() { if (turn_enabled) TurnDown(); if (IsPassable(x, y, RPG::EventPage::Direction_down)) { TurnDown(); y += 1; //IncreaseSteps(); move_failed = false; } else { CheckEventTriggerTouch(x, y + 1); move_failed = true; } }
void Game_Character::MoveDownRight() { if (!IsDirectionFixed()) { if (GetDirection() % 2) { TurnRight(); } else { TurnDown(); } } if (jumping) { jump_plus_x++; jump_plus_y++; return; } if ((IsPassable(GetX(), GetY(), RPG::EventPage::Direction_right) && IsPassable(GetX() + 1, GetY(), RPG::EventPage::Direction_down)) || (IsPassable(GetX(), GetY(), RPG::EventPage::Direction_down) && IsPassable(GetX(), GetY() + 1, RPG::EventPage::Direction_right))) { SetX(GetX() + 1); SetY(GetY() + 1); BeginMove(); stop_count = 0; move_failed = false; } }
void Snake::HandleInput(sf::Event & E) { //Implementacja interfejsu IControl. Zmienia stan wê¿a w zale¿noœci od rodzaju zda¿enia //przekazanego w argumencie, albo tworzy nowy pocisk zmierzaj¹cy do miejsca klikniêcia myszk¹. switch (E.type) { case sf::Event::KeyPressed: if (E.key.code == sf::Keyboard::W) TurnUp(); else if (E.key.code == sf::Keyboard::S) TurnDown(); else if (E.key.code == sf::Keyboard::D) TurnRight(); else if (E.key.code == sf::Keyboard::A) TurnLeft(); break; case sf::Event::MouseButtonPressed: if (E.mouseButton.button == sf::Mouse::Left) Shoot(E.mouseButton.x, E.mouseButton.y); break; default: break; } }
void Game_Character::TurnTowardPlayer() { int sx = DistanceXfromPlayer(); int sy = DistanceYfromPlayer(); if ( std::abs(sx) > std::abs(sy) ) { (sx > 0) ? TurnLeft() : TurnRight(); } else if ( std::abs(sx) < std::abs(sy) ) { (sy > 0) ? TurnUp() : TurnDown(); } }
void Game_Character::Turn180Degree() { switch (direction) { case RPG::EventPage::Direction_down: TurnUp(); break; case RPG::EventPage::Direction_left: TurnRight(); break; case RPG::EventPage::Direction_right: TurnLeft(); break; case RPG::EventPage::Direction_up: TurnDown(); break; } }
void Game_Character::FaceRandomDirection() { switch (rand() % 4) { case 0: TurnDown(); break; case 1: TurnLeft(); break; case 2: TurnRight(); break; case 3: TurnUp(); break; } }
void Game_Character::MoveDown() { if (!IsDirectionFixed()) TurnDown(); if (jumping) { jump_plus_y++; return; } if (IsPassable(GetX(), GetY(), RPG::EventPage::Direction_down)) { SetY(GetY() + 1); BeginMove(); stop_count = 0; move_failed = false; } else { CheckEventTriggerTouch(GetX(), GetY() + 1); move_failed = true; } }
void Game_Character::MoveTypeCustom() { if (IsStopping()) { move_failed = false; if ((size_t)move_route_index >= move_route->move_commands.size()) { // End of Move list if (move_route->repeat) { move_route_index = 0; } else if (move_route_forcing) { move_route_forcing = false; if (move_route_owner != NULL) { move_route_owner->EndMoveRoute(move_route); } move_route = original_move_route; move_route_index = original_move_route_index; original_move_route = NULL; } } else { RPG::MoveCommand& move_command = move_route->move_commands[move_route_index]; switch (move_command.command_id) { case RPG::MoveCommand::Code::move_up: MoveUp(); break; case RPG::MoveCommand::Code::move_right: MoveRight(); break; case RPG::MoveCommand::Code::move_down: MoveDown(); break; case RPG::MoveCommand::Code::move_left: MoveLeft(); break; case RPG::MoveCommand::Code::move_upright: break; case RPG::MoveCommand::Code::move_downright: break; case RPG::MoveCommand::Code::move_downleft: break; case RPG::MoveCommand::Code::move_upleft: break; case RPG::MoveCommand::Code::move_random: MoveRandom(); break; case RPG::MoveCommand::Code::move_towards_hero: MoveTowardsPlayer(); break; case RPG::MoveCommand::Code::move_away_from_hero: MoveAwayFromPlayer(); break; case RPG::MoveCommand::Code::move_forward: MoveForward(); break; case RPG::MoveCommand::Code::face_up: TurnUp(); break; case RPG::MoveCommand::Code::face_right: TurnRight(); break; case RPG::MoveCommand::Code::face_down: TurnDown(); break; case RPG::MoveCommand::Code::face_left: TurnLeft(); break; case RPG::MoveCommand::Code::turn_90_degree_right: Turn90DegreeRight(); break; case RPG::MoveCommand::Code::turn_90_degree_left: Turn90DegreeLeft(); break; case RPG::MoveCommand::Code::turn_180_degree: Turn180Degree(); break; case RPG::MoveCommand::Code::turn_90_degree_random: Turn90DegreeLeftOrRight(); break; case RPG::MoveCommand::Code::face_random_direction: break; case RPG::MoveCommand::Code::face_hero: break; case RPG::MoveCommand::Code::face_away_from_hero: break; case RPG::MoveCommand::Code::wait: break; case RPG::MoveCommand::Code::begin_jump: break; case RPG::MoveCommand::Code::end_jump: break; case RPG::MoveCommand::Code::lock_facing: Lock(); break; case RPG::MoveCommand::Code::unlock_facing: Unlock(); break; case RPG::MoveCommand::Code::increase_movement_speed: move_speed = min(move_speed + 1, 6); break; case RPG::MoveCommand::Code::decrease_movement_speed: move_speed = max(move_speed - 1, 1); break; case RPG::MoveCommand::Code::increase_movement_frequence: break; case RPG::MoveCommand::Code::decrease_movement_frequence: break; case RPG::MoveCommand::Code::switch_on: // Parameter A: Switch to turn on Game_Switches[move_command.parameter_a] = true; Game_Map::SetNeedRefresh(true); break; case RPG::MoveCommand::Code::switch_off: // Parameter A: Switch to turn off Game_Switches[move_command.parameter_a] = false; Game_Map::SetNeedRefresh(true); break; case RPG::MoveCommand::Code::change_graphic: // String: File, Parameter A: index character_name = move_command.parameter_string; character_index = move_command.parameter_a; break; case RPG::MoveCommand::Code::play_sound_effect: // String: File, Parameters: Volume, Tempo, Balance if (move_command.parameter_string != "(OFF)") { Audio().SE_Play(move_command.parameter_string, move_command.parameter_a, move_command.parameter_b); } break; case RPG::MoveCommand::Code::walk_everywhere_on: through = true; break; case RPG::MoveCommand::Code::walk_everywhere_off: through = false; break; case RPG::MoveCommand::Code::stop_animation: break; case RPG::MoveCommand::Code::start_animation: break; case RPG::MoveCommand::Code::increase_transp: break; // ??? case RPG::MoveCommand::Code::decrease_transp: break; // ??? } if (move_route->skippable || !move_failed) { ++move_route_index; } } } }
void Game_Character::MoveTypeCustom() { // Detect if custom movement or event overwrite const RPG::MoveRoute* active_route; int active_route_index; bool overwrite_changed = IsMoveRouteOverwritten(); if (IsMoveRouteOverwritten()) { active_route = &GetMoveRoute(); active_route_index = GetMoveRouteIndex(); } else { active_route = &original_move_route; active_route_index = GetOriginalMoveRouteIndex(); } if (IsStopping()) { move_failed = false; if ((size_t)active_route_index >= active_route->move_commands.size()) { // End of Move list if (active_route->repeat) { active_route_index = 0; SetMoveRouteRepeated(true); } else if (IsMoveRouteOverwritten()) { SetMoveRouteOverwritten(false); EndMoveRoute(); stop_count = 0; } } else { do { const RPG::MoveCommand& move_command = active_route->move_commands[active_route_index]; int command_id = move_command.command_id; if (!jumping && command_id == RPG::MoveCommand::Code::begin_jump) { active_route_index = BeginJump(active_route, active_route_index); } switch (move_command.command_id) { case RPG::MoveCommand::Code::move_up: MoveUp(); break; case RPG::MoveCommand::Code::move_right: MoveRight(); break; case RPG::MoveCommand::Code::move_down: MoveDown(); break; case RPG::MoveCommand::Code::move_left: MoveLeft(); break; case RPG::MoveCommand::Code::move_upright: MoveUpRight(); break; case RPG::MoveCommand::Code::move_downright: MoveDownRight(); break; case RPG::MoveCommand::Code::move_downleft: MoveDownLeft(); break; case RPG::MoveCommand::Code::move_upleft: MoveUpLeft(); break; case RPG::MoveCommand::Code::move_random: MoveRandom(); break; case RPG::MoveCommand::Code::move_towards_hero: MoveTowardsPlayer(); break; case RPG::MoveCommand::Code::move_away_from_hero: MoveAwayFromPlayer(); break; case RPG::MoveCommand::Code::move_forward: MoveForward(); break; case RPG::MoveCommand::Code::face_up: TurnUp(); break; case RPG::MoveCommand::Code::face_right: TurnRight(); break; case RPG::MoveCommand::Code::face_down: TurnDown(); break; case RPG::MoveCommand::Code::face_left: TurnLeft(); break; case RPG::MoveCommand::Code::turn_90_degree_right: Turn90DegreeRight(); break; case RPG::MoveCommand::Code::turn_90_degree_left: Turn90DegreeLeft(); break; case RPG::MoveCommand::Code::turn_180_degree: Turn180Degree(); break; case RPG::MoveCommand::Code::turn_90_degree_random: Turn90DegreeLeftOrRight(); break; case RPG::MoveCommand::Code::face_random_direction: FaceRandomDirection(); break; case RPG::MoveCommand::Code::face_hero: TurnTowardHero(); break; case RPG::MoveCommand::Code::face_away_from_hero: TurnAwayFromHero(); break; case RPG::MoveCommand::Code::wait: Wait(); break; case RPG::MoveCommand::Code::begin_jump: // Multiple BeginJumps are ignored break; case RPG::MoveCommand::Code::end_jump: active_route_index = EndJump(active_route, active_route_index); break; case RPG::MoveCommand::Code::lock_facing: SetFacingLocked(true); break; case RPG::MoveCommand::Code::unlock_facing: SetFacingLocked(false); break; case RPG::MoveCommand::Code::increase_movement_speed: SetMoveSpeed(min(GetMoveSpeed() + 1, 6)); break; case RPG::MoveCommand::Code::decrease_movement_speed: SetMoveSpeed(max(GetMoveSpeed() - 1, 1)); break; case RPG::MoveCommand::Code::increase_movement_frequence: SetMoveFrequency(min(GetMoveFrequency() + 1, 8)); break; case RPG::MoveCommand::Code::decrease_movement_frequence: SetMoveFrequency(max(GetMoveFrequency() - 1, 1)); break; case RPG::MoveCommand::Code::switch_on: // Parameter A: Switch to turn on Game_Switches[move_command.parameter_a] = true; Game_Map::SetNeedRefresh(true); break; case RPG::MoveCommand::Code::switch_off: // Parameter A: Switch to turn off Game_Switches[move_command.parameter_a] = false; Game_Map::SetNeedRefresh(true); break; case RPG::MoveCommand::Code::change_graphic: // String: File, Parameter A: index SetGraphic(move_command.parameter_string, move_command.parameter_a); break; case RPG::MoveCommand::Code::play_sound_effect: // String: File, Parameters: Volume, Tempo, Balance if (move_command.parameter_string != "(OFF)") { Audio().SE_Play(move_command.parameter_string, move_command.parameter_a, move_command.parameter_b); } break; case RPG::MoveCommand::Code::walk_everywhere_on: through = true; break; case RPG::MoveCommand::Code::walk_everywhere_off: through = false; break; case RPG::MoveCommand::Code::stop_animation: walk_animation = false; break; case RPG::MoveCommand::Code::start_animation: walk_animation = true; break; case RPG::MoveCommand::Code::increase_transp: SetOpacity(max(40, GetOpacity() - 45)); break; case RPG::MoveCommand::Code::decrease_transp: SetOpacity(GetOpacity() + 45); break; } if (active_route->skippable || !move_failed) { ++active_route_index; } } while (jumping); if ((size_t)active_route_index >= active_route->move_commands.size()) { stop_count = (active_route->repeat ? 0 : 256); } } } // When the overwrite status changed the active_index belongs to the // current non-active move route if (overwrite_changed != IsMoveRouteOverwritten()) { if (IsMoveRouteOverwritten()) { SetOriginalMoveRouteIndex(active_route_index); } else { SetMoveRouteIndex(active_route_index); } } else { if (IsMoveRouteOverwritten()) { SetMoveRouteIndex(active_route_index); } else { SetOriginalMoveRouteIndex(active_route_index); } } }