예제 #1
0
 public virtual void Init(StatManager statManager, EnemyActionManager enemyActionManager)
 {
     this.statManager        = statManager;
     this.enemyActionManager = enemyActionManager;
     players = new List <Player>();
     enemies = new List <Enemy>();
 }
 public void Init(CharacterManager characterManager,
                  StatManager statManager,
                  EnemyActionManager enemyActionManager)
 {
     this.characterManager   = characterManager;
     this.statManager        = statManager;
     this.enemyActionManager = enemyActionManager;
 }
예제 #3
0
 private void Awake()
 {
     // Wont need this just for clarification.
     if (_instance != null && _instance != this)
     {
         Destroy(this.gameObject);
     }
     else
     {
         // If the singleton hasn't been initialized yet
         _instance = this;
     }
 }
예제 #4
0
    private static Vector2 AggressiveMove(Actor actor, Player target, float actDistance)
    {
        EnemyActionManager manager       = actor.GetComponent <EnemyActionManager>();
        SensorManager      sensors       = manager.sensorManager;
        SensorManager      playerSensors = manager.PlayerManager.sensorManager;
        Actor player = manager.Player;

        float x = 0, y = 0;
        float input = WALK_INPUT;

        if (GetDistToPlayer(target, actor) > actDistance || !actor.Grounded)
        {
            input = RUN_INPUT;
        }
        if (target.transform.position.x > actor.transform.position.x)
        {
            x = -input;
        }
        else
        {
            x = input;
        }

        if (sensors.Front != null && sensors.Front.tag.Equals("Enemy"))
        {
            x = 0;
        }

        if (sensors.Front != null && sensors.Front.tag.Equals("Enemy") &&
            (playerSensors.Front == null || playerSensors.Back == null))
        {
            y = 1;
        }

        float dot = Vector3.Dot(actor.transform.forward, (player.transform.position - actor.transform.position).normalized);

        if (sensors.Front != null &&
            sensors.Front.tag.Equals("Player") &&
            player.State.Equals(ActorState.GRABBING) &&
            playerSensors.Back == null &&
            dot > 0.7f)
        {
            y = 1;
            // Extra help to get over actors
            actor.Rigidbody.AddForce((50 * Vector3.up), ForceMode.Impulse);
        }

        return(new Vector2(x, y));
    }
예제 #5
0
    public void Setup()
    {
        gameObject = new GameObject();

        enemyActionManager = gameObject.AddComponent <EnemyActionManager>();

        mockRandomGenerator = new Mock <RandomGenerator>();
        mockPlayer          = new Mock <Player>("name", 100, 1);
        mockEnemy           = new Mock <Enemy>("name", 100, 1);
        mockAttack          = new Mock <Attack>(null, 5, 5, null, null);
        mockDefend          = new Mock <Defend>(null, 5, 5, null, null);
        mockPatternAction   = new Mock <CharacterAction>(null, null, null);

        mockEnemy.Setup(enemy => enemy.Attack(mockPlayer.Object)).Returns(mockAttack.Object);
        mockEnemy.Setup(enemy => enemy.Defend(mockPlayer.Object)).Returns(mockDefend.Object);
        mockEnemy.Setup(enemy => enemy.NextActionFromPattern(mockPlayer.Object))
        .Returns(mockPatternAction.Object);

        enemyActionManager.Init(mockRandomGenerator.Object);
    }
예제 #6
0
    private static Vector2 AvoidMove(Actor actor, Player target, float actDistance)
    {
        EnemyActionManager manager = actor.GetComponent <EnemyActionManager>();
        SensorManager      sensors = manager.sensorManager;
        float x = 0, y = 0;
        float distToPlayer = GetDistToPlayer(target, actor);

        if (distToPlayer < actDistance - RUN_BUFFER)
        {
            float input = RUN_INPUT;

            x = target.transform.position.x > actor.transform.position.x ? input : -input;

            if (sensors.Front != null && sensors.Front.tag.Equals("Enemy") && actor.Grounded)
            {
                y = 1;
            }

            if (sensors.Back != null && sensors.Back.name.Contains("rope") ||
                sensors.Front != null && sensors.Front.name.Contains("rope"))
            {
                x = 0;
                y = 0;
            }
        }
        else if (distToPlayer > actDistance + RUN_BUFFER)
        {
            float input = WALK_INPUT;
            x = target.transform.position.x < actor.transform.position.x ? input : -input;

            if (sensors.Front != null && sensors.Front.tag.Equals("Enemy"))
            {
                x = 0;
            }
        }

        return(new Vector2(x, y));
    }