Exemple #1
0
    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;
        }
    }
Exemple #2
0
    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);
        }
    }