Ejemplo n.º 1
0
        public void LinearFlight(TimeUpdateEvent e, HangarCameraLinearFlightNode hangar)
        {
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;
            float t = Mathf.Pow(Mathf.Clamp01(((UnityTime.time - hangar.hangarCameraFlightData.StartFlightTime) - hangarCameraFlightData.ArcFlightTime) / hangarCameraFlightData.LinearFlightTime), 0.3333333f);

            hangar.cameraRootTransform.Root.position = Vector3.Lerp(hangarCameraFlightData.ArcToLinearPoint, hangarCameraFlightData.DestinationCameraPosition, t);
        }
Ejemplo n.º 2
0
        public void Init(NodeAddedEvent e, HangarCameraNode hangar)
        {
            this.SetupCameraFlightESM(hangar.Entity);
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;

            base.NewEvent <HangarCameraArcToLinearFlightEvent>().Attach(hangar).ScheduleDelayed(hangarCameraFlightData.ArcFlightTime);
            base.NewEvent <HangarCameraStopFlightEvent>().Attach(hangar).ScheduleDelayed(hangarCameraFlightData.FlightTime);
        }
Ejemplo n.º 3
0
        public void RotateToDestination(HangarCameraRotateToDestinationEvent e, HangarCameraNode hangar)
        {
            Quaternion middleCameraRotation;
            Quaternion originCameraRotation;
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;
            float t = Mathf.Pow((UnityTime.time - hangar.hangarCameraFlightData.StartFlightTime) / hangarCameraFlightData.FlightTime, 0.3333333f);

            if (t < 0.5)
            {
                originCameraRotation = hangarCameraFlightData.OriginCameraRotation;
                middleCameraRotation = hangarCameraFlightData.MiddleCameraRotation;
                t *= 2f;
            }
            else
            {
                originCameraRotation = hangarCameraFlightData.MiddleCameraRotation;
                middleCameraRotation = hangarCameraFlightData.DestinationCameraRotation;
                t = (t - 0.5f) * 2f;
            }
            hangar.cameraRootTransform.Root.SetRotationSafe(Quaternion.Slerp(originCameraRotation, middleCameraRotation, t));
        }
        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>();
            }
        }
Ejemplo n.º 5
0
        private void StartFlightToTank(HangarCameraNode hangar)
        {
            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 vector3 = position - a;

            vector3.y = 0f;
            vector3.Normalize();
            Vector3 b = hangar.hangarCameraStartPosition.transform.position;

            b.y = position.y;
            float   num2    = Vector3.Distance(a, position);
            float   num3    = Mathf.Asin(hangarConfig.FlightToTankRadius / num2) * 2f;
            Vector3 vector5 = (Vector3)(Quaternion.Euler(0f, num3 * 57.29578f, 0f) * vector3);

            vector5.Normalize();
            Vector3 vector8 = ((vector3 + vector5) / 2f).normalized * (num2 / Mathf.Cos(num3 / 2f));

            vector8.y = position.y;
            float   num5     = 3.141593f + num3;
            float   num6     = (num2 * Mathf.Tan(num3 / 2f)) * num5;
            Vector3 vector9  = a + (vector5 * Vector3.Distance(a, b));
            Vector3 vector10 = a + (vector5 * num2);
            float   num7     = Vector3.Distance(vector10, vector9);

            if (num6 > num7)
            {
                num6 = 0f;
            }
            vector9.y = hangar.hangarCameraStartPosition.transform.position.y;
            float      num8        = hangarConfig.FlightToTankTime / (num6 + num7);
            Quaternion quaternion  = Quaternion.LookRotation(hangar.hangarTankPosition.transform.position - vector9, Vector3.up);
            Quaternion quaternion2 = Quaternion.Slerp(hangar.cameraRootTransform.Root.rotation, quaternion, 0.5f);
            HangarCameraFlightDataComponent component = new HangarCameraFlightDataComponent {
                FlightTime          = hangarConfig.FlightToTankTime,
                ArcFlightPivotPoint = vector8,
                ArcFlightTime       = num6 * num8
            };

            if (num6 > 0f)
            {
                component.ArcFlightAngleSpeed = (num5 * 57.29578f) / component.ArcFlightTime;
            }
            component.ArcToLinearPoint          = vector10;
            component.LinearFlightTime          = num7 * num8;
            component.OriginCameraRotation      = hangar.cameraRootTransform.Root.rotation;
            component.OriginCameraPosition      = hangar.cameraRootTransform.Root.position;
            component.MiddleCameraRotation      = quaternion2;
            component.DestinationCameraPosition = vector9;
            component.DestinationCameraRotation = quaternion;
            component.StartFlightTime           = UnityTime.time;
            if (hangar.Entity.HasComponent <HangarCameraFlightDataComponent>())
            {
                hangar.Entity.RemoveComponent <HangarCameraFlightDataComponent>();
            }
            hangar.Entity.AddComponent(component);
            hangar.hangarCameraViewState.Esm.ChangeState <HangarCameraViewState.FlightToTankState>();
        }
Ejemplo n.º 6
0
        public void StopLinearFlight(NodeRemoveEvent e, HangarCameraLinearFlightNode hangar)
        {
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;

            hangar.cameraRootTransform.Root.position = hangarCameraFlightData.DestinationCameraPosition;
        }
Ejemplo n.º 7
0
        public void ArcFlight(TimeUpdateEvent e, HangarCameraArcFlightNode hangar)
        {
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;

            hangar.cameraRootTransform.Root.RotateAround(hangarCameraFlightData.ArcFlightPivotPoint, Vector3.up, e.DeltaTime * hangarCameraFlightData.ArcFlightAngleSpeed);
        }
Ejemplo n.º 8
0
        public void StopRotateToDestination(NodeRemoveEvent e, HangarCameraNode hangar)
        {
            HangarCameraFlightDataComponent hangarCameraFlightData = hangar.hangarCameraFlightData;

            hangar.cameraRootTransform.Root.SetRotationSafe(hangarCameraFlightData.DestinationCameraRotation);
        }