Esempio n. 1
0
    public override StateMachineBehavior Update(AICharacterController owner, float deltaTime)
    {
        var aiMovement = owner.GetComponent <IAstarAI>();

        if (owner.Vision.SpottedObject)
        {
            lastKnownPosition = owner.Vision.SpottedObject.transform.position.XY();
            var combat = owner.GetComponent <CombatComponent>();
            if (Vector3.Distance(lastKnownPosition, owner.transform.position) <
                0.8f * (combat.MeleeRange + owner.Vision.SpottedObject.GetComponent <CircleCollider2D>().radius))
            {
                aiMovement.destination = owner.transform.position;
                Vector2 direction   = lastKnownPosition - owner.transform.position.XY();
                float   targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90;
                var     targetRot   = Quaternion.Euler(0, 0, targetAngle);
                owner.transform.rotation = Quaternion.RotateTowards(owner.transform.rotation, targetRot, 360.0f * deltaTime);
                combat.PerformMeleeAttack();
            }
            else
            {
                aiMovement.maxSpeed    = owner.MaxMovementSpeed;
                aiMovement.destination = lastKnownPosition;
            }
        }
        else
        {
            if (Vector3.Distance(lastKnownPosition, owner.transform.position) < 1.0f)
            {
                return(new Alert(lastKnownPosition));
            }
        }

        return(this);
    }
Esempio n. 2
0
        protected override void init()
        {
            base.init();
            IAIControllerFactory controllerFactory = AIControllerFactory.getEntity();

            aiCharacterController = controllerFactory.getAICharacterController(this, new BrainFactory());
        }
    public void CheckForTarget()
    {
        if (pause)
        {
            return;
        }

        if (controller == null)
        {
            controller = GetComponent <AICharacterController>();
        }

        if (currentTargets.Count > 0)
        {
            foreach (GameObject target in currentTargets)
            {
                if (target != null)
                {
                    controller.SetTarget(target.transform);
                }
            }
            ai.ResetTriggers();
        }
        else
        {
            controller.SetTarget(gameObject.transform);
        }
    }
 void Start()
 {
     controller = GetComponent <AICharacterController>();
     gameObject.GetComponent <AITriggerManager>().AddTrigger("Movement Trigger", 0.3f, TargetReachedTriggerFunc, true);
     if (currentTargets == null)
     {
         currentTargets = new List <GameObject>();
     }
 }
Esempio n. 5
0
 // Start is called before the first frame update
 void Start()
 {
     respawnPoint     = gameObject.transform.position;
     characterContRef = PlayerCharacterController.request();
     animRef          = gameObject.GetComponent <AnimationController>();
     if (gameObject.CompareTag("AI"))
     {
         aiControllerRef = gameObject.GetComponent <AICharacterController>();
     }
     else
     {
         deathCam.Follow = null;
     }
 }
Esempio n. 6
0
    public override void Initialize(AICharacterController owner)
    {
        base.Initialize(owner);
        Assert.IsTrue(owner.PatrolPoints.Length > 0);
        float minDist = Vector3.Distance(owner.PatrolPoints[0].Position, owner.transform.position);

        for (int pointIndex = 1; pointIndex < owner.PatrolPoints.Length; ++pointIndex)
        {
            float dist = Vector3.Distance(owner.PatrolPoints[pointIndex].Position, owner.transform.position);
            if (dist < minDist)
            {
                minDist = dist;
                currentPatrolPointIndex = pointIndex;
            }
        }
        owner.Hearing.OnSoundReceived += OnSoundReceived;
    }
Esempio n. 7
0
    private void Update()
    {
        if (GameStateManager.Instance.CurrentStage == GameStateManager.GameStage.Daytime)
        {
            if (_spawnedMonster == null || _spawnedMonster.AIAnimator.IsDead)
            {
                _respawnTimer -= Time.deltaTime;
                if (_respawnTimer <= 0)
                {
                    _respawnTimer = _respawnInterval.RandomValue;

                    Vector3 spawnPos = transform.position;
                    PathFindManager.Instance.TryGetTraversablePoint(spawnPos, out spawnPos, 10);
                    _spawnedMonster = Instantiate(_monsterPrefab, spawnPos, transform.rotation);
                }
            }
        }
    }
Esempio n. 8
0
    void RespawnCharacter(GameObject go, GameObject respawnPoint, int damageResetPos, int playerNumber)
    {
        GameObject          p = Instantiate(go, respawnPoint.transform.position, Quaternion.Euler(0, 0, 0));
        CharacterController characterController = p.GetComponent <CharacterController>();

        if (characterController != null)
        {
            characterController.enabled = true;
        }

        AICharacterController aiCharacterController = p.GetComponent <AICharacterController>();

        if (playerNumber == 1)
        {
            p.tag = "Player";

            if (aiCharacterController != null)
            {
                Destroy(aiCharacterController);
            }
        }
        else
        {
            p.tag = "AI";
            aiCharacterController.enabled = true;
        }

        Animator animator = p.GetComponent <Animator>();

        animator.enabled = true;

        p.transform.position = new Vector3(transform.position.x, transform.position.y, -1);
        battleController.ResetDamageAtPosition(damageResetPos);
        DamageResolver dmgResolver = p.GetComponent <DamageResolver>();

        if (dmgResolver != null)
        {
            dmgResolver.DoDamage += battleController.HandleApplyDamage;
        }
    }
Esempio n. 9
0
    public override StateMachineBehavior Update(AICharacterController owner, float deltaTime)
    {
        PatrolPoint currentPatrolPoint = owner.PatrolPoints[currentPatrolPointIndex];
        Vector3     dest = currentPatrolPoint.Position;

        if (Vector3.Distance(dest, owner.transform.position) < 1.0f)
        {
            waitTimer += deltaTime;
            if (waitTimer > currentPatrolPoint.waitTime)
            {
                ++currentPatrolPointIndex;
                if (currentPatrolPointIndex == owner.PatrolPoints.Length)
                {
                    currentPatrolPointIndex = 0;
                }

                waitTimer = 0;
            }
        }
        else
        {
            var aiMovement = owner.GetComponent <IAstarAI>();
            aiMovement.maxSpeed    = 0.25f * owner.MaxMovementSpeed;
            aiMovement.destination = currentPatrolPoint.Position;
        }

        if (owner.Vision.SpottedObject)
        {
            return(new Chase());
        }

        if (soundRegistered)
        {
            return(new Alert(registeredSoundPosition));
        }

        return(this);
    }
Esempio n. 10
0
    // Start is called before the first frame update
    void Start()
    {
        rb               = gameObject.GetComponent <Rigidbody>();
        collider         = gameObject.GetComponent <Collider>();
        characterContRef = PlayerCharacterController.request();
        animRef          = gameObject.GetComponent <Animator>();

        Transform[] trans = gameObject.GetComponentsInChildren <Transform>();
        foreach (Transform t in trans)
        {
            if (t.CompareTag("PelvisBone"))
            {
                pelvis = t.gameObject;
            }
        }
        if (gameObject.CompareTag("AI"))
        {
            navMeshRef      = gameObject.GetComponent <NavMeshAgent>();
            aiControllerRef = gameObject.GetComponent <AICharacterController>();
        }

        deActivateRagdoll();
    }
Esempio n. 11
0
    public override StateMachineBehavior Update(AICharacterController owner, float deltaTime)
    {
        if (owner.Vision.SpottedObject)
        {
            return(new Chase());
        }

        if (Vector2.Distance(soundPosition, owner.transform.position.XY()) < 1.0f)
        {
            waitTimer += deltaTime;
            if (waitTimer > 3.0f)
            {
                return(new Patrol());
            }
        }
        else
        {
            var aiMovement = owner.GetComponent <IAstarAI>();
            aiMovement.maxSpeed    = 0.5f * owner.MaxMovementSpeed;
            aiMovement.destination = soundPosition;
        }

        return(this);
    }
Esempio n. 12
0
 public virtual void Finish(AICharacterController owner)
 {
 }
Esempio n. 13
0
 public override void Finish(AICharacterController owner)
 {
     base.Finish(owner);
     owner.Hearing.OnSoundReceived -= OnSoundReceived;
 }
    public IEnumerator ResetCharacter(CharacterControllerALL playerController, BoxCollider boxCollider, SpriteRenderer renderer, AICharacterController aiController = null)
    {
        yield return(new WaitForSeconds(1f));

        if (aiController != null)
        {
            aiController.enabled = true;
        }

        if (playerController != null)
        {
            playerController.canIMove = true;
        }

        if (boxCollider != null)
        {
            boxCollider.enabled = true;
        }

        if (rigidbody2D != null)
        {
            rigidbody2D.isKinematic = false;
        }

        if (renderer != null)
        {
            renderer.color = Color.white;
        }
    }
 public void ResetAfterFrozen(CharacterControllerALL playerController, BoxCollider boxCollider, SpriteRenderer renderer, AICharacterController aiController = null)
 {
     StartCoroutine(playerController.ResetCharacter(playerController, boxCollider, renderer, aiController));
 }
Esempio n. 16
0
 public virtual void Initialize(AICharacterController owner)
 {
 }
Esempio n. 17
0
 public abstract StateMachineBehavior Update(AICharacterController owner, float deltaTime);
Esempio n. 18
0
 public override void Initialize(AICharacterController owner)
 {
     base.Initialize(owner);
     owner.Hearing.OnSoundReceived += OnSoundReceived;
 }