// No need for FsmTgt-related event handlers as there is no _fsmTgt void Idling_UponOrbitedObjectDeath(IShipOrbitable deadOrbitedObject) { LogEvent(); BreakOrbit(); }
private bool __TryValidateRightToAssumeHighOrbit(IShipNavigable moveTgt, out IShipOrbitable highOrbitTgt) { highOrbitTgt = moveTgt as IShipOrbitable; if (highOrbitTgt != null && highOrbitTgt.IsHighOrbitAllowedBy(Owner)) { return true; } return false; }
private void UponOrbitedObjectDeath(IShipOrbitable deadOrbitedObject) { RelayToCurrentState(deadOrbitedObject); }
// Note: Attacking from orbit is no longer allowed /// <summary> /// Breaks orbit around the IShipOrbitable object _itemBeingOrbited. /// Must be in orbit to be called. /// </summary> private void BreakOrbit() { D.Assert(IsInOrbit); D.AssertNotNull(_orbitingJoint); string orbitMsg = "high"; if (IsInCloseOrbit) { orbitMsg = "close"; } _itemBeingOrbited.HandleBrokeOrbit(this); Destroy(_orbitingJoint); _orbitingJoint = null; //_orbitingJoint.connectedBody = null; attaches joint to world IMortalItem mortalObjectBeingOrbited = _itemBeingOrbited as IMortalItem; if (mortalObjectBeingOrbited != null) { mortalObjectBeingOrbited.deathOneShot -= OrbitedObjectDeathEventHandler; } D.Log(ShowDebugLog, "{0} has left {1} orbit around {2}.", DebugName, orbitMsg, _itemBeingOrbited.DebugName); _itemBeingOrbited = null; }
/// <summary> /// Tries to assume high orbit around the provided, already confirmed /// highOrbitTarget. Returns <c>true</c> once the ship is no longer /// actively underway and high orbit has been assumed, <c>false</c> otherwise. /// </summary> /// <param name="highOrbitTgt">The high orbit target.</param> /// <returns></returns> private bool AttemptHighOrbitAround(IShipOrbitable highOrbitTgt) { D.Assert(!IsInOrbit); D.AssertNull(_orbitingJoint); if (!_helm.IsActivelyUnderway) { Profiler.BeginSample("Proper AddComponent allocation", gameObject); _orbitingJoint = gameObject.AddComponent<FixedJoint>(); Profiler.EndSample(); highOrbitTgt.AssumeHighOrbit(this, _orbitingJoint); IMortalItem mortalHighOrbitTgt = highOrbitTgt as IMortalItem; if (mortalHighOrbitTgt != null) { mortalHighOrbitTgt.deathOneShot += OrbitedObjectDeathEventHandler; } _itemBeingOrbited = highOrbitTgt; D.Log(ShowDebugLog, "{0} has assumed high orbit around {1}.", DebugName, highOrbitTgt.DebugName); return true; } return false; }
private void HandleOrbitedObjectDeath(IShipOrbitable deadOrbitedItem) { D.Assert(!(deadOrbitedItem as AMortalItem).IsOperational); UponOrbitedObjectDeath(deadOrbitedItem); }
// No need for _fsmTgt-related event handlers as there is no _fsmTgt void Repairing_UponOrbitedObjectDeath(IShipOrbitable deadOrbitedObject) { LogEvent(); BreakOrbit(); // TODO orderFailureCause? Return(); }