Beispiel #1
0
        public MoonPath(Simulator simulator, CelestialBody celestialBody, int alpha, string imageName, int size)
            : base(simulator, celestialBody, alpha, imageName, size)
        {
            relativePosition = new Vector3(celestialBody.Circle.Radius + Main.Random.Next(10, 30), 0, 0);

            float relativePositionY = Main.Random.Next(10, 30);

            Vector3 relativePositionInverse = relativePosition;
            relativePositionInverse.X = -relativePositionInverse.X;

            double step = RotationTime / 6;

            InnerPath = new Path3D
            (
                new List<Vector3>()
                {
                    relativePosition + new Vector3(0, -relativePositionY, 0),
                    relativePosition + new Vector3(30, 0, 0),
                    relativePosition + new Vector3(0, relativePositionY, 0),
                    relativePositionInverse + new Vector3(0, relativePositionY, 0),
                    relativePositionInverse + new Vector3(-30, 0, 0),
                    relativePositionInverse + new Vector3(0, -relativePositionY, 0),
                    relativePosition + new Vector3(0, -relativePositionY, 0)
                },
                new List<double>()
                {
                    step * 0,
                    step * 1,
                    step * 2,
                    step * 3,
                    step * 4,
                    step * 5,
                    step * 6
                }
            );

            TimeFrontStart = step * 1;
            TimeFrontEnd = step * 4;
            Representation.VisualPriority = (ActualRotationTime >= TimeFrontStart && ActualRotationTime <= TimeFrontEnd) ?
                VisualPriorities.Default.Moon :
                CelestialBody.VisualPriority + 0.01f;

            float rotation = MathHelper.ToRadians(Main.Random.Next(0, 180));

            Matrix.CreateRotationZ(rotation, out RotationMatrix);

            InnerPath.GetPosition(ActualRotationTime, ref Position);
            Vector3.Transform(ref Position, ref RotationMatrix, out Position);
            Vector3.Add(ref Position, ref CelestialBody.position, out Position);
        }