コード例 #1
0
        private void SpawnBotType(string subTypeName, MatrixD viewMatrix)
        {
            if (MyDefinitionManager.Static.GetBotDefinitions().Any(e => e.Id.SubtypeName.Equals(subTypeName, StringComparison.InvariantCultureIgnoreCase)))
            {
                var currentPlanetList = new List <IMyVoxelBase>();
                MyAPIGateway.Session.VoxelMaps.GetInstances(currentPlanetList, v => v is MyPlanet);

                bool canSpawn = false;

                foreach (IMyVoxelBase planet in currentPlanetList)
                {
                    MyGravityProviderComponent gravityProvider = planet.Components.Get <MyGravityProviderComponent>();
                    canSpawn |= gravityProvider.IsPositionInRange(viewMatrix.Translation);
                }

                if (canSpawn)
                {
                    Sandbox.Game.MyVisualScriptLogicProvider.SpawnBot(subTypeName, viewMatrix.Translation);
                    MyAPIGateway.Utilities.SendMessage(SenderSteamId, "server", "Spawned {0}", subTypeName);
                }
                else
                {
                    MyAPIGateway.Utilities.SendMessage(SenderSteamId, "server", "Cannot spawn here. Requires natural gravity.");
                }
            }
        }
コード例 #2
0
        private float PlanetaryInfluence()
        {
            BoundingBoxD box           = _thisEntity.PositionComp.WorldAABB;
            MyPlanet     closestPlanet = MyGamePruningStructure.GetClosestPlanet(ref box);

            if (closestPlanet == null)
            {
                return(0);
            }
            MyGravityProviderComponent myGravityProviderComponent = closestPlanet.Components.Get <MyGravityProviderComponent>();

            return(closestPlanet.GetAirDensity(box.Center) * myGravityProviderComponent.GetGravityMultiplier(box.Center));
        }
コード例 #3
0
        public static float CalculateRequiredLift(MyCubeBlock block)
        {
            BoundingBoxD box           = block.PositionComp.WorldAABB;
            MyPlanet     closestPlanet = MyGamePruningStructure.GetClosestPlanet(ref box);

            if (closestPlanet == null)
            {
                return(0);
            }
            MyGravityProviderComponent myGravityProviderComponent = closestPlanet.Components.Get <MyGravityProviderComponent>();
            MatrixD worldMatrixRef = block.PositionComp.WorldMatrixRef;

            return(block.CubeGrid.Mass * myGravityProviderComponent.GetGravityMultiplier(worldMatrixRef.Translation) * GravityConstant);
        }
コード例 #4
0
        public static float PlanetaryInfluence(IMyEntity block)
        {
            BoundingBoxD box           = block.PositionComp.WorldAABB;
            MyPlanet     closestPlanet = MyGamePruningStructure.GetClosestPlanet(ref box);

            if (closestPlanet == null)
            {
                return(0);
            }
            MyGravityProviderComponent myGravityProviderComponent = closestPlanet.Components.Get <MyGravityProviderComponent>();

            return(closestPlanet.GetAirDensity(box.Center) * myGravityProviderComponent.GetGravityMultiplier(box.Center));
            //MySimpleObjectDraw
            //billboa
        }
コード例 #5
0
ファイル: WarpSystem.cs プロジェクト: austinvaness/WarpDrive
        bool IsInGravity()
        {
            Vector3D position = grid.MainGrid.PositionComp.GetPosition();
            MyPlanet planet   = MyGamePruningStructure.GetClosestPlanet(position);

            if (planet == null)
            {
                return(false);
            }

            MyGravityProviderComponent gravComp = planet.Components.Get <MyGravityProviderComponent>();

            if (gravComp == null)
            {
                return(false);
            }

            return(gravComp.GetGravityMultiplier(position) > 0);
        }
コード例 #6
0
        public override void UpdateBeforeSimulation()
        {
            if (MyAPIGateway.Session == null)
            {
                return;
            }
            if (MyAPIGateway.Utilities.IsDedicated)
            {
                return;
            }

            if (!m_initialize)
            {
                Initialize();
            }

            if (nearEffects.Count + farEffects.Count > 0)
            {
                IMyCamera cam        = MyAPIGateway.Session.Camera;
                Vector3D  pos        = cam.Position;
                Vector3D  vel        = (pos - lastCamPos) / (DateTime.Now - lastCamTime).TotalSeconds;
                Vector3D  camForward = cam.WorldMatrix.Forward;
                Vector3D  camLeft    = cam.WorldMatrix.Left;
                Vector3D  camUp      = cam.WorldMatrix.Up;

                lastCamTime = DateTime.Now;
                lastCamPos  = pos;

                pos += vel;
                Vector3D grav = new Vector3D(0);
                {
                    var planets = new List <IMyVoxelBase>();
                    MyAPIGateway.Session.VoxelMaps.GetInstances(planets, v => v is MyPlanet);
                    foreach (IMyVoxelBase planet in planets)
                    {
                        MyGravityProviderComponent gravC = planet.Components.Get <MyGravityProviderComponent>();
                        if (gravC != null)
                        {
                            grav += gravC.GetWorldGravity(pos);
                        }
                    }
                }
                Vector3D up = -grav;
                up.Normalize();
                Vector3D forward = Vector3D.Cross(Vector3D.Cross(up, camForward), up);
                forward.Normalize();
                Random r      = new Random();
                double tanFOV = Math.Tan(Math.PI * cam.FieldOfViewAngle / 360.0);
                foreach (MyParticleEffect effect in nearEffects)
                {
                    double   dist    = (2 * r.NextDouble() - 1) * 10;
                    double   theta   = r.NextDouble() * Math.PI * 2;
                    double   lrField = Math.Abs(tanFOV * dist) + 5;
                    Vector3D refPos  = pos + (camForward * Math.Cos(theta) * dist) + (camLeft * dist * Math.Sin(theta)) + (lrField * camUp * (r.NextDouble() * 2 - 1));
                    effect.WorldMatrix = MatrixD.CreateWorld(refPos, forward, up);
                }
                foreach (MyParticleEffect effect in farEffects)
                {
                    double   dist    = 10 + r.NextDouble() * 50;
                    double   lrMod   = (r.NextDouble() * 2) - 1;
                    double   lrField = Math.Abs(tanFOV * dist);
                    Vector3D refPos  = pos + (camForward * dist) + (lrMod * lrField * camLeft) + (lrField * camUp * (r.NextDouble() * 2 - 1));
                    effect.WorldMatrix = MatrixD.CreateWorld(refPos, forward, up);
                }
            }

            //Logging.Instance.Log("Did a thing");
        }