private void SetHighPrecisionPosition(GameObject.GameObject obj) { var highPrecision = new HighPrecisionPosition(); highPrecision.Position = Planet.GetComponent <HighPrecisionPosition>().Position; obj.AddComponent(highPrecision); }
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(); }
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)); }