// Called from outside, based on screen touches. // Basically just translates button inputs into logical inputs. void TouchscreenController::HandleTouchButtonInput(int input, bool value) { int logicalInput = 0; switch (input) { case ButtonId_Left: logicalInput = LogicalInputs_Left; break; case ButtonId_Right: logicalInput = LogicalInputs_Right; break; case ButtonId_Attack: logicalInput = LogicalInputs_ThrowPie; break; case ButtonId_Defend: logicalInput = LogicalInputs_Deflect; break; default: break; } SetLogicalInputs(logicalInput, value); }
void GamepadController::AdvanceFrame(WorldTime /*delta_time*/) { went_down_ = went_up_ = 0; Gamepad gamepad = input_system_->GetGamepad(controller_id_); SetLogicalInputs(LogicalInputs_Up, gamepad.GetButton(Gamepad::kUp).is_down()); SetLogicalInputs(LogicalInputs_Down, gamepad.GetButton(Gamepad::kDown).is_down()); SetLogicalInputs(LogicalInputs_Left, gamepad.GetButton(Gamepad::kLeft).is_down()); SetLogicalInputs(LogicalInputs_Right, gamepad.GetButton(Gamepad::kRight).is_down()); SetLogicalInputs(LogicalInputs_ThrowPie, gamepad.GetButton(Gamepad::kUp).is_down() || gamepad.GetButton(Gamepad::kButtonA).is_down()); SetLogicalInputs(LogicalInputs_Deflect, gamepad.GetButton(Gamepad::kDown).is_down() || gamepad.GetButton(Gamepad::kButtonB).is_down()); SetLogicalInputs(LogicalInputs_Select, gamepad.GetButton(Gamepad::kButtonA).is_down()); SetLogicalInputs(LogicalInputs_Cancel, gamepad.GetButton(Gamepad::kButtonB).is_down()); }
void MultiplayerController::AdvanceFrame(WorldTime delta_time) { if (character_id_ == kNoCharacter) { return; } ClearAllLogicalInputs(); // Check to make sure we're valid to be sending input. Character* character = gamestate_->characters()[character_id_].get(); auto character_state = character->State(); if (character->health() <= 0 || character_state == StateId_KO || character_state == StateId_Joining || character_state == StateId_Jumping || character_state == StateId_HitByPie || character_state == StateId_Won) { return; } // Prepare to block if (block_delay_ > 0) { block_delay_ -= delta_time; if (block_delay_ < 0) block_delay_ = 0; } else { // if we're blocking, keep blocking. if (block_hold_ > 0) { block_hold_ -= delta_time; // aiming has priority so we do it first, then we block } } if (aim_at_character_id_ != kNoCharacter) { // we have a character to aim at, make sure we are aimed there. if (character->target() != aim_at_character_id_) { fplbase::LogInfo(fplbase::kApplication, "MultiplayerController: player %d executing aim at %d", character_id_, aim_at_character_id_); character->force_target(aim_at_character_id_); return; } } if (block_hold_ > 0 && block_delay_ == 0) { SetLogicalInputs(LogicalInputs_Deflect, true); fplbase::LogInfo(fplbase::kApplication, "MultiplayerController: player %d executing block %d", character_id_, block_hold_); return; } if (throw_pie_delay_ > 0 && character_state != StateId_Throwing) { throw_pie_delay_ -= delta_time; if (throw_pie_delay_ <= 0) { fplbase::LogInfo(fplbase::kApplication, "MultiplayerController: player %d executing throw pie", character_id_); SetLogicalInputs(LogicalInputs_ThrowPie, true); throw_pie_delay_ = 0; return; } } if (grow_pie_delay_ > 0) { grow_pie_delay_ -= delta_time; if (grow_pie_delay_ <= 0) { grow_pie_delay_ = 0; SetLogicalInputs(LogicalInputs_TriggerPieGrowth, true); } } }