protected override void Execute(List <InputEntity> entities) { // input from Player allowed only in a specific game state Debug.Log("Execute Input System"); foreach (var entity in entities) { if (!_contexts.gameState.gameStateEntity.isWaitingPlayerState) { entity.isClick = false; continue; } if (entity.isAttackInput) { AttackTargetService.PrepareAttackTarget(_enemies, _characters); _contexts.gameState.gameStateEntity.isWaitingPlayerState = false; _contexts.gameState.gameStateEntity.isPlayersTurnState = true; } if (entity.isSwitchInput) { Debug.Log("Launch Switch Target"); SwitchTargetService.SwitchTarget(_enemies); } entity.isClick = false; } }
public static void PrepareAttackTarget(IGroup <GameEntity> _enemies, IGroup <GameEntity> _characters) { GameEntity currentTarget = FindCurrentTarget(_enemies); if (currentTarget == null || currentTarget.isStateDead) { SwitchTargetService.SwitchTarget(_enemies); currentTarget = FindCurrentTarget(_enemies); } if (currentTarget != null && _characters.count > 0) { GameEntity attacker = FindAliveAttacker(_characters); if (attacker.hasWeapon) { switch (attacker.weapon.weapon) { case Constants.Weapon.Pistol: attacker.isStateIdle = false; attacker.isStateAttack = true; attacker.animator.animator.SetTrigger(Shoot); break; case Constants.Weapon.Bat: case Constants.Weapon.Fist: attacker.isStateIdle = false; attacker.isStateRunningToEnemy = true; if (attacker.hasTargetPosition) { attacker.ReplaceTargetPosition(currentTarget.position.value); } else { attacker.AddTargetPosition(currentTarget.position.value); } attacker.animator.animator.SetFloat(Speed, attacker.runSpeed.value);; break; default: throw new ArgumentOutOfRangeException(); } } else { Debug.Log("Something wrong happened... "); } } else { Debug.Log("No attackers?... " + _characters.count); } }