public void CalculateFlightToTank(NodeRemoveEvent e, HangarLocationScreenNode screen, [JoinAll] HangarCameraNode hangar, [JoinAll] Optional <NewHangarLocationScreenNode> newLocationScreen) { if (!newLocationScreen.IsPresent()) { this.StartFlightToTank(hangar); } }
public void CalculateFlightToLocation(NodeAddedEvent e, HangarLocationScreenNode screen, [JoinAll] HangarCameraNode hangar, [JoinAll] ICollection <HangarLocationScreenNode> activeLocationScreen) { Transform transform; if ((activeLocationScreen.Count <= 1) && hangar.hangarLocations.Locations.TryGetValue(screen.hangarLocation.HangarLocation, out transform)) { base.ScheduleEvent <HangarCameraStopFlightEvent>(hangar); HangarConfigComponent hangarConfig = hangar.hangarConfig; Vector3 position = hangar.cameraRootTransform.Root.position; Vector3 a = hangar.hangarTankPosition.transform.position; a.y = position.y; Vector3 b = transform.position; b.y = position.y; Vector3 from = position - a; from.y = 0f; from.Normalize(); Vector3 to = b - a; to.y = 0f; to.Normalize(); float num = Vector3.Distance(a, position); float num2 = Vector3.Angle(from, to) * 0.01745329f; Vector3 vector8 = Vector3.Cross(to, from); Vector3 vector9 = ((from + to) / 2f).normalized * (num / Mathf.Cos(num2 / 2f)); float num4 = 3.141593f - num2; float num5 = (num * Mathf.Tan(num2 / 2f)) * num4; Vector3 vector10 = a + (to * num); float num6 = Vector3.Distance(vector10, b); if (num5 > num6) { num5 = 0f; } float num7 = hangarConfig.FlightToLocationTime / (num5 + num6); Vector3 vector11 = Vector3.Cross((Vector3)(hangar.cameraRootTransform.Root.rotation * Vector3.forward), (Vector3)(transform.rotation * Vector3.forward)); Quaternion quaternion = Quaternion.Slerp(hangar.cameraRootTransform.Root.rotation, transform.rotation, 0.5f); if ((MathUtil.Sign(vector8.y) > 0f) && (MathUtil.Sign(vector11.y) < 0f)) { quaternion = Quaternion.AngleAxis(180f, Vector3.up) * quaternion; } HangarCameraFlightDataComponent component = new HangarCameraFlightDataComponent { FlightTime = hangarConfig.FlightToLocationTime, ArcFlightPivotPoint = vector9, ArcFlightTime = num5 * num7 }; if (num5 > 0f) { component.ArcFlightAngleSpeed = ((num4 * 57.29578f) / component.ArcFlightTime) * MathUtil.Sign(vector8.y); } component.ArcToLinearPoint = vector10; component.LinearFlightTime = num6 * num7; component.OriginCameraRotation = hangar.cameraRootTransform.Root.rotation; component.OriginCameraPosition = hangar.cameraRootTransform.Root.position; component.MiddleCameraRotation = quaternion; component.DestinationCameraPosition = transform.position; component.DestinationCameraRotation = transform.rotation; component.StartFlightTime = UnityTime.time; if (hangar.Entity.HasComponent <HangarCameraFlightDataComponent>()) { hangar.Entity.RemoveComponent <HangarCameraFlightDataComponent>(); } hangar.Entity.AddComponent(component); hangar.hangarCameraViewState.Esm.ChangeState <HangarCameraViewState.FlightToLocationState>(); } }
public void CalculateFlightToTank(ShowScreenEvent e, Node any, [Combine, JoinAll] HangarLocationScreenNode screen, [Combine, JoinAll] HangarCameraNode hangar) { this.StartFlightToTank(hangar); }