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; } } }