private void HandleLinkEnd(OffMeshLinkMoveMethod MoveMethod)
 {
     if (MoveMethod != OffMeshLinkMoveMethod.Teleport && MoveMethod != OffMeshLinkMoveMethod.NormalSpeed)
     {
         Animator.SetTrigger(Landed);
     }
 }
 private void HandleLinkStart(OffMeshLinkMoveMethod MoveMethod)
 {
     if (MoveMethod == OffMeshLinkMoveMethod.NormalSpeed)
     {
         Animator.SetBool(IsWalking, true);
     }
     else if (MoveMethod != OffMeshLinkMoveMethod.Teleport)
     {
         Animator.SetTrigger(Jump);
     }
 }
Example #3
0
        public void Init()
        {
            if (randomWaypoint == null)
            {
                randomWaypoint = new vFisherYatesRandom();
            }
            if (randomPatrolPoint == null)
            {
                randomPatrolPoint = new vFisherYatesRandom();
            }
            currentWaypoint    = -1;
            currentPatrolPoint = -1;
            fwd                  = transform.forward;
            destination          = transform.position;
            agent                = GetComponent <UnityEngine.AI.NavMeshAgent>();
            agent.updateRotation = false;
            agentPath            = new UnityEngine.AI.NavMeshPath();
            sphereSensor         = GetComponentInChildren <v_AISphereSensor>();
            if (sphereSensor)
            {
                sphereSensor.SetColliderRadius(maxDetectDistance);
            }
            animator     = GetComponent <Animator>();
            meleeManager = GetComponent <vMeleeManager>();
            canAttack    = true;
            attackCount  = 0;
            sideMovement = GetRandonSide();
            destination  = transform.position;

            _rigidbody             = GetComponent <Rigidbody>();
            _rigidbody.useGravity  = false;
            _rigidbody.isKinematic = false;
            _rigidbody.constraints = RigidbodyConstraints.None | RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionZ;
            _capsuleCollider       = GetComponent <CapsuleCollider>();

            healthSlider  = GetComponentInChildren <v_SpriteHealth>();
            head          = animator.GetBoneTransform(HumanBodyBones.Head);
            oldPosition   = transform.position;
            currentHealth = maxHealth;

            method = OffMeshLinkMoveMethod.Grounded;

            // set up Actions
            jumpOverLayer = UnityEngine.AI.NavMesh.GetAreaFromName("JumpOver");
            stepUpLayer   = UnityEngine.AI.NavMesh.GetAreaFromName("StepUp");
            climbUpLayer  = UnityEngine.AI.NavMesh.GetAreaFromName("ClimbUp");
            useJumpOver   = ActionIsEnabled(AIActions.JumpOver);
            useStepUp     = ActionIsEnabled(AIActions.StepUp);
            useClimbUp    = ActionIsEnabled(AIActions.ClimbUp);
            startPosition = transform.position;
        }
Example #4
0
        public void Init()
        {
            if (randomWaypoint == null)
            {
                randomWaypoint = new FisherYatesRandom();
            }
            if (randomPatrolPoint == null)
            {
                randomPatrolPoint = new FisherYatesRandom();
            }
            currentWaypoint    = -1;
            currentPatrolPoint = -1;

            agent = GetComponent <NavMeshAgent>();
            agent.updateRotation = false;
            agentPath            = new NavMeshPath();

            animator     = GetComponent <Animator>();
            meleeManager = GetComponent <MeleeEquipmentManager>();
            canAttack    = true;
            sideMovement = GetRandonSide();
            destination  = transform.position;

            _rigidbody             = GetComponent <Rigidbody>();
            _rigidbody.useGravity  = false;
            _rigidbody.isKinematic = false;
            _rigidbody.constraints = RigidbodyConstraints.None | RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionZ;
            _capsuleCollider       = GetComponent <CapsuleCollider>();

            healthSlider  = GetComponentInChildren <SpriteHealth>();
            head          = animator.GetBoneTransform(HumanBodyBones.Head);
            oldPosition   = transform.position;
            currentHealth = startingHealth;

            method = OffMeshLinkMoveMethod.Grounded;

            if (vGameController.instance != null && vGameController.instance.currentPlayer != null)
            {
                target = vGameController.instance.currentPlayer.transform;
            }
        }
Example #5
0
    // Use this for initialization
    IEnumerator Start()
    {
        _projectile = Resources.Load <GameObject>("Prefabs/RangedAttack/ProjectileSlow");

        anim  = GetComponent <Animator>();
        rb    = GetComponent <Rigidbody2D>();
        agent = GetComponent <NavMeshAgent>();
        BoxCollider2D enemyCollider  = GetComponent <BoxCollider2D>();
        BoxCollider2D playerCollider = player.GetComponent <BoxCollider2D>();

        attacking = false;

        // determines minimum space to leave between AI and player
        stoppingDistance       = (playerCollider.size.x / 2) + (playerCollider.size.x / 2) + 0.01f;
        agent.stoppingDistance = stoppingDistance;

        // turns automatic off mesh link traveral off, we are going to handle it manually
        agent.autoTraverseOffMeshLink = false;

        // get the ground floor y position
        groundYPos = ground.transform.position.y + (ground.GetComponent <BoxCollider2D>().size.y / 2);

        while (true)
        {
            OffMeshLinkData omld = agent.currentOffMeshLinkData;
            // if we are not currently on an off mesh link the NavAgent controls movement automatically
            if (omld.offMeshLink != null)
            {
                // determine what type of Off Mesh Link we are currently on
                switch (omld.offMeshLink.area)
                {
                case 2:
                    method = OffMeshLinkMoveMethod.Jump;
                    break;

                case 3:
                    method = OffMeshLinkMoveMethod.LevelOneJump;
                    break;

                case 4:
                    method = OffMeshLinkMoveMethod.LevelOneFall;
                    break;

                case 5:
                    method = OffMeshLinkMoveMethod.LevelTwoJump;
                    break;

                case 6:
                    method = OffMeshLinkMoveMethod.LevelTwoDownJump;
                    break;

                default:
                    method = OffMeshLinkMoveMethod.NormalSpeed;
                    break;
                }
            }

            // handle each off mesh link appropriately
            if (agent.isOnOffMeshLink)
            {
                if (method == OffMeshLinkMoveMethod.NormalSpeed)
                {
                    yield return(StartCoroutine(NormalSpeed(agent)));
                }
                if (method == OffMeshLinkMoveMethod.Jump)
                {
                    yield return(StartCoroutine(Parabola(agent, 1.5f, 0.75f)));
                }
                if (method == OffMeshLinkMoveMethod.LevelOneJump)
                {
                    yield return(StartCoroutine(Parabola(agent, 1.5f, 0.75f)));
                }
                if (method == OffMeshLinkMoveMethod.LevelOneFall)
                {
                    yield return(StartCoroutine(Fall(agent, 0.475f)));
                }
                if (method == OffMeshLinkMoveMethod.LevelTwoJump)
                {
                    yield return(StartCoroutine(Parabola(agent, 1.75f, 1.0f)));
                }
                if (method == OffMeshLinkMoveMethod.LevelTwoDownJump)
                {
                    yield return(StartCoroutine(Parabola(agent, 1.5f, 1.0f)));
                }

                if (agent.enabled)
                {
                    agent.CompleteOffMeshLink();
                }
            }
            yield return(null);
        }
    }