public override void SteerOther(BasicSteering controller) { GoblinSteering steering = controller as GoblinSteering; if (steering.SurfaceContact.normal == Vector2.zero) { controller.SetStrategy(JumpingGoblinFloatStrategy.Instance()); } GoblinCombatStrategy.CheckTargets(steering,2); if (steering.Targets.Count != 0) { GameObject mainTarget = steering.Targets[0]; if (mainTarget.tag == "Enemy") { if (mainTarget.GetComponent<PhysicsObject>().GetExtents().min.x - steering.GetComponent<PhysicsObject>().GetExtents().max.x < 0.1) { steering.Stopped = true; } } else if (TargetJumpTags.Contains(mainTarget.tag) && mainTarget.GetComponent<PhysicsObject>().GetExtents().min.x - steering.GetComponent<PhysicsObject>().GetExtents().max.x > 1.5) { float height = mainTarget.GetComponent<PhysicsObject>().FindMaxHeight() - steering.GetComponent<PhysicsObject>().GetExtents().min.y; controller.GetComponent<JumpingGoblinLocomotion>().Jump(new Vector2(height / 4, height)); } else { controller.SetStrategy(JumpingGoblinCombatStrategy.Instance()); } } }
public static List<RaycastHit2D> GetForwardObjectsList(BasicSteering controller, float range = 1f) { Collider2D controllerCollider = controller.GetComponent<Collider2D>(); float xMax = controllerCollider.bounds.max.x; float yMax = controllerCollider.bounds.max.y; float yMin = controllerCollider.bounds.min.y; Vector2 dirVector = new Vector2(range, yMax - yMin); HashSet<RaycastHit2D> hits = new HashSet<RaycastHit2D>(Physics2D.RaycastAll(new Vector2(xMax, yMin), dirVector, dirVector.magnitude, Constants.RaycastMaskPhysics)); Debug.DrawRay(new Vector2(xMax, yMin), dirVector, Color.red); dirVector.y = -dirVector.y; hits.UnionWith(Physics2D.RaycastAll(new Vector2(xMax, yMax), dirVector, dirVector.magnitude, Constants.RaycastMaskPhysics)); Debug.DrawRay(new Vector2(xMax, yMax), dirVector, Color.red); return hits.ToList(); }
public override void SteerPhysics(BasicSteering controller) { JumpingGoblinSteering parentController = controller as JumpingGoblinSteering; Vector2 normal = Vector2.up; float angle = 0; angle = Vector2.Angle(parentController.transform.up, normal) * Mathf.Sign(parentController.transform.up.x - normal.x); angle = Utility.NormalizeAngle(angle); parentController.GetComponent<GoblinLocomotion>().KeepBalance(angle); if (controller.GetComponent<Rigidbody2D>().velocity.y < ParachuteOpenSpeed) { controller.SendMessage("Break", 4f); controller.SendMessage("ParachuteOpen"); } }