public override void PhysicsLogic(Fighter fighter) { switch (directive) { case Act.ATTACK: if (target) { Vector2 dif = target.transform.position - transform.position; float angle = Angle(dif) - 90f; if (dif.magnitude > maxDistance) { fighter.Move(1); } else if (dif.magnitude < minDistance) { fighter.Move(-1); } else { fighter.Move(0); } if (Vector3.Distance(fighter.transform.position, target.transform.position) < attackRange && (angleBetween < minAttackAngle || fighter.CanBeAimed())) { Vector3 inaccuracy = new Vector3(MathHelper.Rand(-attackInaccuracy, attackInaccuracy), MathHelper.Rand(-attackInaccuracy, attackInaccuracy)); angle += MathHelper.Rand(-attackInaccuracy, attackInaccuracy); fighter.Aim(fighter.ReadyToFire() ? target.transform.position + inaccuracy : target.transform.position); fighter.Fire(); } foreach (Ship ship in Ship.ships) { if (ship && Vector2.Distance(transform.position, ship.transform.position) < followRange && ship.shipID != fighter.shipID && (target == null || ship.shipID != target.shipID)) { angle -= Vector2.SignedAngle(ship.transform.position, transform.position) / Mathf.Clamp(1f, (ship.transform.position - transform.position).sqrMagnitude, followRange); } } RotateTowards(fighter, angle); } break; case Act.CHASE: if (target) { RotateTowards(fighter, Angle(target.transform.position - transform.position) - 90f); if (angleBetween < minAttackAngle) { fighter.Move(1); } } break; case Act.EVADE: if (target) { RotateTowards(fighter, Angle(target.transform.position - transform.position) + 90f); fighter.Move(1); } break; case Act.WANDER: fighter.Move(speed); if (!changingDirection) { speed = MathHelper.Rand(0.25f, 1f); StartCoroutine(ChangeDirection(fighter)); } break; } }
public override void PhysicsLogic(Fighter fighter) { if (!DosMenu.isMenuOpen) { fighter.Move(Input.GetAxis("Vertical"), -Input.GetAxis("Horizontal")); if (fighter.module != null) { switch (fighter.module.GetModuleType()) { case ShipModule.ModuleType.ACTIVE: if (Input.GetKeyDown(KeyCode.Space)) { fighter.module.OnActivate(fighter); } else { fighter.module.DuringNoUse(fighter); } break; case ShipModule.ModuleType.HELD: if (Input.GetKey(KeyCode.Space)) { if (fighter.module.isActive) { fighter.module.DuringUse(fighter); } else { fighter.module.isActive = true; fighter.module.OnActivate(fighter); } } else if (fighter.module.isActive) { fighter.module.isActive = false; fighter.module.OnDeactivate(fighter); } else { fighter.module.DuringNoUse(fighter); } break; case ShipModule.ModuleType.TOGGLE: if (Input.GetKeyDown(KeyCode.Space)) { if (fighter.module.isActive) { fighter.module.isActive = false; fighter.module.OnDeactivate(fighter); } else { fighter.module.isActive = true; fighter.module.OnActivate(fighter); } } if (fighter.module.isActive) { fighter.module.DuringUse(fighter); } else { fighter.module.DuringNoUse(fighter); } break; } } fighter.Aim(Camera.main.ScreenToWorldPoint(Input.mousePosition)); if (Input.GetMouseButton(0)) { fighter.Fire(); } } }