コード例 #1
0
 public void CalculateFlightToTank(NodeRemoveEvent e, HangarLocationScreenNode screen, [JoinAll] HangarCameraNode hangar, [JoinAll] Optional <NewHangarLocationScreenNode> newLocationScreen)
 {
     if (!newLocationScreen.IsPresent())
     {
         this.StartFlightToTank(hangar);
     }
 }
コード例 #2
0
        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>();
            }
        }
コード例 #3
0
 public void CalculateFlightToTank(ShowScreenEvent e, Node any, [Combine, JoinAll] HangarLocationScreenNode screen, [Combine, JoinAll] HangarCameraNode hangar)
 {
     this.StartFlightToTank(hangar);
 }