Exemple #1
0
    public bool IsColliderValidForCollisions(Collider coll)
    {
        if (IgnoredColliders.Count == 0)
        {
            return true;
        }

        if (IgnoredColliders.Contains(coll))
        {
            return false;
        }

        return true;
    }
    private bool IsValidTarget(GameObject hit, Collider2D collision)
    {
        // filter self hits
        if (hit == this)
        {
            return(false);
        }

        // filter ignored colliders
        if (IgnoredColliders.Contains(collision))
        {
            return(false);
        }

        // filter null hits and invalid tags
        if (hit == null || !ValidTags.Contains(hit.tag))
        {
            return(false);
        }

        return(true);
    }
    public void Update()
    {
        if (WadeDistance() < 150)
        {
            motor.volume = moveSpeed / speed - .4f;
            motor.pitch  = moveSpeed / speed + .5f;
        }


        curveApproachAngle = WadeDistance() / curveApproachDivision;
        stateString        = CurrentATVBozuState.ToString();
        timeSinceLastJump += Time.deltaTime;
        DoTargeting();
        DoHealth();

        groundFar   = DetectForwardGroundFar();
        groundFront = DetectForwardGround();

        stateTimer += Time.deltaTime;
        dropTimer  += Time.deltaTime;

        switch (CurrentATVBozuState)
        {
        case ATVBozuState.Idle:
        {
            if (WadeDistance() < 150)
            {
                if (!hasCharged)
                {
                    hasCharged = true;
                    TransitionToState(ATVBozuState.Charge);
                }
                else if (stateTimer > idleWaitTime && WadeDistance() > startChargingDistance)
                {
                    int randomStateChange = RandomInt(1, 2);
                    switch (randomStateChange)
                    {
                    case 1:
                    {
                        TransitionToState(ATVBozuState.Circle);
                        break;
                    }

                    case 2:
                    {
                        TransitionToState(ATVBozuState.CurveApproach);
                        break;
                    }
                    }
                }
                else if (stateTimer > idleWaitTime)
                {
                    TransitionToState(ATVBozuState.Charge);
                }
            }
            break;
        }

        case ATVBozuState.Shooting:
        {
            if (dropTimer > shootFrequency)
            {
                Shoot("notflat");
                dropTimer = 0;
            }

            if (stateTimer > shootTime)
            {
                TransitionToState(ATVBozuState.Idle);
            }

            if (WadeDistance() < wadeCloseBy && timeSinceLastJump > jumpCoolDown)
            {
                TransitionToState(ATVBozuState.Jump);
            }

            break;
        }

        case ATVBozuState.Charge:
        {
            if (DetectForwardWall())
            {
                TransitionToState(ATVBozuState.Idle);
            }

            if (dropTimer > dropFrequency && WadeDistance() < startChargingDistance - 8)
            {
                GameObject      tempGrenade     = Instantiate(grenade, transform.position + -transform.forward * 3 + Vector3.up, transform.rotation) as GameObject;
                CapsuleCollider grenadeCollider = tempGrenade.GetComponent <CapsuleCollider>();
                Grenade         grenadeSc       = tempGrenade.GetComponent <Grenade>();
                grenadeSc.IgnoreCollisions(GetComponent <Collider>());
                grenadeSc.enemyGrenade = true;
                IgnoredColliders.Add(grenadeCollider);
                Rigidbody tempGrenadeRB = tempGrenade.GetComponent <Rigidbody>();
                tempGrenadeRB.AddForce(new Vector3(Random.Range(-26f, 26f), 0, Random.Range(-26f, 26f)) * throwForceDown, ForceMode.Impulse);
                //tempGrenadeRB.AddForce(Vector3.up * throwForceDown, ForceMode.Impulse);
                dropTimer = 0;
            }



            //if (!DetectForwardGround())
            //{
            //    TransitionToState(ATVBozuState.Idle);
            //}

            if (stateTimer > runLength)
            {
                TransitionToState(ATVBozuState.Idle);
            }



            break;
        }

        case ATVBozuState.Fall:
        {
            if (Motor.GroundingStatus.FoundAnyGround)
            {
                TransitionToState(ATVBozuState.Idle);
            }
            break;
        }

        case ATVBozuState.CurveApproach:
        {
            if (WadeDistance() < tailWhipStartDistance)
            {
                TransitionToState(ATVBozuState.TailWhip);
            }
            break;
        }

        case ATVBozuState.TailWhip:
        {
            if (stateTimer > tailWhipTime)
            {
                TransitionToState(ATVBozuState.TailWhipCoolDown);
            }
            break;
        }

        case ATVBozuState.TailWhipCoolDown:
        {
            if (stateTimer > tailWhipTime + 2)
            {
                TransitionToState(ATVBozuState.Idle);
            }
            break;
        }

        case ATVBozuState.Circle:
        {
            if (dropTimer > dropFrequency * 10)
            {
                animator.SetBool("Toss", true);
                GrenadeThrow();
                dropTimer = 0;
            }
            else
            {
                animator.SetBool("Toss", false);
            }



            if (stateTimer > runLength * 2)
            {
                TransitionToState(ATVBozuState.Idle);
            }
            break;
        }
        }
    }