예제 #1
0
        private void SetHighPrecisionPosition(GameObject.GameObject obj)
        {
            var highPrecision = new HighPrecisionPosition();

            highPrecision.Position = Planet.GetComponent <HighPrecisionPosition>().Position;
            obj.AddComponent(highPrecision);
        }
예제 #2
0
        public Planet(string name, Vector3d position, IModule module, Effect testEffect, float radius, Color sea, Color land, Color mountains)
        {
            nodesBeingBuilt  = new Dictionary <Vector3, PatchMinMax>();
            neighbourTracker = new NeighbourTracker();
            this.Name        = name;
            planetId         = ++planetIdList;
            this.module      = module;
            this.testEffect  = testEffect;
            this.radius      = radius;

            Position = new HighPrecisionPosition();
            AddComponent(Position);

            Transform.SetHighPrecisionPosition(position);

            splitDistance = radius * 4;

            customProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
                                                                   SystemCore.GraphicsDevice.Viewport.AspectRatio, 1f, this.radius * 10);

            SeaColor      = sea;
            LandColor     = land;
            MountainColor = mountains;


            Initialise();
        }
예제 #3
0
        public Vector3 GetPosition(Planet planet, HighPrecisionPosition cameraPosition)
        {
            Vector3 forwardPointOnSurface = planet.Transform.AbsoluteTransform.Forward;

            Vector3 rotateLatitude = Vector3.Transform(forwardPointOnSurface,
                                                       Matrix.CreateFromAxisAngle(planet.Transform.AbsoluteTransform.Right, MathHelper.ToRadians(Latitude)));

            Vector3 rotateLongAndLat = Vector3.Transform(rotateLatitude,
                                                         Matrix.CreateFromAxisAngle(planet.Transform.AbsoluteTransform.Up, MathHelper.ToRadians(Longitude)));

            return(planet.Transform.AbsoluteTransform.Translation + rotateLongAndLat * (planet.radius + Altitude));
        }