public static ulong GetBattlePoints(MyObjectBuilder_CubeGrid[] grids) { ulong pts = 0; foreach (var grid in grids) pts += GetBattlePoints(grid); return pts; }
public static void RequestThrow(MyObjectBuilder_CubeGrid grid, Vector3D position, Vector3D linearVelocity, float mass, MyStringId throwSound) { ThrowMsg msg = new ThrowMsg(); msg.Grid = grid; msg.Position = position; msg.LinearVelocity = linearVelocity; msg.Mass = mass; msg.ThrowSound = throwSound; MySession.Static.SyncLayer.SendMessageToServer(ref msg); }
public void ProcessCubeGrid(MyObjectBuilder_CubeGrid gridBuilder) { gridBuilder.IsStatic = false; foreach (var block in gridBuilder.CubeBlocks) { var functionalBlock = block as MyObjectBuilder_FunctionalBlock; if (functionalBlock != null) { functionalBlock.Enabled = false; } } }
public bool Contains(IMySlimBlock block) { if (block.CubeGrid == null) return false; // FatBlock is null for non functional blocks such as armor if (block.FatBlock != null) return Contains(block.FatBlock); // since some blocks aren't an entity we have to deal with them otherwise // we'll create an grid that acts as substitute for the block to get an entity that has a collision // TODO find a better suited way to get the boundings of an armor block var worldPosition = block.CubeGrid.GetPosition() + block.Position; // creating grid var gridBuilder = new MyObjectBuilder_CubeGrid() { PersistentFlags = MyPersistentEntityFlags2.None, PositionAndOrientation = new MyPositionAndOrientation(worldPosition, Vector3.Forward, Vector3.Up), DisplayName = "substitute", GridSizeEnum = block.CubeGrid.GridSizeEnum }; // creating cube block MyObjectBuilder_CubeBlock cube = new MyObjectBuilder_CubeBlock(); cube.Min = block.Position; cube.SubtypeName = block.CubeGrid.GridSizeEnum == MyCubeSize.Large ? "LargeBlockArmorBlock" : "SmallBlockArmorBlock"; cube.BuildPercent = 0; gridBuilder.CubeBlocks.Add(cube); // add grid MyAPIGateway.Entities.RemapObjectBuilder(gridBuilder); var entity = MyAPIGateway.Entities.CreateFromObjectBuilder(gridBuilder); var grid = entity as IMyCubeGrid; var blocks = new List<IMySlimBlock>(); // get blocks grid.GetBlocks(blocks, b => b != null); if (blocks.Count > 0) { // found block var cubeBlock = blocks[0].FatBlock; bool isInside = Contains(cubeBlock); grid.Close(); return isInside; } return false; }
public CubeGridEntity( MyObjectBuilder_CubeGrid definition ) : base(definition) { _cubeBlockManager = new CubeBlockManager( this ); List<CubeBlockEntity> cubeBlockList = new List<CubeBlockEntity>( ); foreach ( MyObjectBuilder_CubeBlock cubeBlock in definition.CubeBlocks ) { cubeBlock.EntityId = 0; cubeBlockList.Add( new CubeBlockEntity( this, cubeBlock ) ); } _cubeBlockManager.Load( cubeBlockList ); _lastNameRefresh = DateTime.Now; _name = "Cube Grid"; }
public override bool Invoke(string messageText) { MatrixD worldMatrix; Vector3D position; if (MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.Parent == null) { worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, false); // dead center of player cross hairs. position = worldMatrix.Translation + worldMatrix.Forward * 2.5f; // Spawn item 1.5m in front of player for safety. } else { worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.WorldMatrix; position = worldMatrix.Translation + worldMatrix.Forward * 2.5f + worldMatrix.Up * 0.5f; // Spawn item 1.5m in front of player in cockpit for safety. } // TODO: multiply vector against current entity.LinearVelocity. Vector3 vector = worldMatrix.Forward * 300; var gridObjectBuilder = new MyObjectBuilder_CubeGrid() { PersistentFlags = MyPersistentEntityFlags2.CastShadows | MyPersistentEntityFlags2.InScene, GridSizeEnum = MyCubeSize.Large, IsStatic = false, LinearVelocity = vector, AngularVelocity = new SerializableVector3(0, 0, 0), PositionAndOrientation = new MyPositionAndOrientation(position, Vector3.Forward, Vector3.Up), DisplayName = "Prepare to die." }; MyObjectBuilder_Warhead cube = new MyObjectBuilder_Warhead() { Min = new SerializableVector3I(0, 0, 0), SubtypeName = "LargeWarhead", ColorMaskHSV = new SerializableVector3(0, -1, 0), EntityId = 0, Owner = 0, BlockOrientation = new SerializableBlockOrientation(Base6Directions.Direction.Forward, Base6Directions.Direction.Up), ShareMode = MyOwnershipShareModeEnum.All, CustomName = "Hello. My name is Inigo Montoya. You killed my father. Prepare to die.", }; gridObjectBuilder.CubeBlocks.Add(cube); var tempList = new List<MyObjectBuilder_EntityBase>(); tempList.Add(gridObjectBuilder); tempList.CreateAndSyncEntities(); return true; }
public static ulong GetBattlePoints(MyObjectBuilder_CubeGrid grid) { ulong pts = 0; foreach (var block in grid.CubeBlocks) { MyObjectBuilder_CompoundCubeBlock compoundBlock = block as MyObjectBuilder_CompoundCubeBlock; if (compoundBlock != null) { foreach (var blockInCompound in compoundBlock.Blocks) pts += GetBattlePoints(blockInCompound); } else { pts += GetBattlePoints(block); } } return pts; }
public virtual void Init(MyObjectBuilder_CubeGrid builder) { var thrustComp = CubeGrid.Components.Get<MyEntityThrustComponent>(); if(thrustComp != null) thrustComp.DampenersEnabled = builder.DampenersEnabled; if (WheelSystem != null) WheelSystem.HandBrake = builder.Handbrake; if (MySession.Static.Settings.EnableOxygen) { GasSystem.Init(builder.OxygenAmount); } if (MyPerGameSettings.EnableJumpDrive) { JumpSystem.Init(builder.JumpDriveDirection, builder.JumpElapsedTicks); } }
public void LoadFromCubeGrid(IMyCubeGrid grid) { base.LoadFromEntity(grid as IMyEntity); IngameGrid = grid; //IngameGrid = grid; DisplayName = grid.DisplayName; // ToDo: get all owners instead of big (for targeting) BigOwners = grid.BigOwners; // ToDo: get real spawn owners (for spawning) SpawnOwners = grid.BigOwners; //IMyEntity entity = grid as IMyEntity; Builder = grid.GetObjectBuilder() as MyObjectBuilder_CubeGrid; if (Builder == null) { Log.Error("Got null builder for entity " + EntityId + ". We will be unable to save it now.", "LoadFromCubeGrid"); } else { //Log.Error("Filling builder nulls for " + EntityId, "LoadFromCubeGrid"); //Builder.FillNullsWithDefaults(); } }
public static bool DoesGridHaveFourBeacons( MyObjectBuilder_CubeGrid grid ) { int count = 0; foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( block is MyObjectBuilder_Beacon ) count++; if ( count >= 4 ) return true; } return false; }
public static bool DoesGridHavePowerSupply( MyObjectBuilder_CubeGrid grid ) { return grid.CubeBlocks.Any( DoesBlockSupplyPower ); }
public override void Init(MyObjectBuilder_CubeBlock objectBuilder, MyCubeGrid cubeGrid) { base.Init(objectBuilder, cubeGrid); if (!MyFakes.ENABLE_PROJECTOR_BLOCK) { return; } var projectorBuilder = (MyObjectBuilder_Projector)objectBuilder; if (projectorBuilder.ProjectedGrid != null) { m_projectionOffset = projectorBuilder.ProjectionOffset; m_projectionRotation = projectorBuilder.ProjectionRotation; m_savedProjection = projectorBuilder.ProjectedGrid; m_keepProjection = projectorBuilder.KeepProjection; } m_showOnlyBuildable = projectorBuilder.ShowOnlyBuildable; m_instantBuildingEnabled = projectorBuilder.InstantBuildingEnabled; m_maxNumberOfProjections = projectorBuilder.MaxNumberOfProjections; m_maxNumberOfBlocksPerProjection = projectorBuilder.MaxNumberOfBlocks; m_getOwnershipFromProjector = projectorBuilder.GetOwnershipFromProjector; m_projectionsRemaining = MathHelper.Clamp(projectorBuilder.ProjectionsRemaining, 0, m_maxNumberOfProjections); PowerReceiver = new MyPowerReceiver( MyConsumerGroupEnum.Utility, false, BlockDefinition.RequiredPowerInput, this.CalculateRequiredPowerInput); PowerReceiver.IsPoweredChanged += PowerReceiver_IsPoweredChanged; IsWorkingChanged += MyProjector_IsWorkingChanged; PowerReceiver.Update(); m_statsDirty = true; UpdateText(); SyncObject = new MySyncProjector(this); NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged; CubeGrid.OnBlockAdded += previewGrid_OnBlockAdded; CubeGrid.OnBlockRemoved += previewGrid_OnBlockRemoved; CubeGrid.OnGridSplit += CubeGrid_OnGridSplit; }
internal void SetNewBlueprint(MyObjectBuilder_CubeGrid gridBuilder) { m_originalGridBuilder = gridBuilder; var clone = (MyObjectBuilder_CubeGrid)gridBuilder.Clone(); MyEntities.RemapObjectBuilder(clone); m_clipboard.ProcessCubeGrid(clone); m_clipboard.SetGridFromBuilder(clone, Vector3.Zero, 0f); if (m_instantBuildingEnabled) { ResetRotation(); var boundingBox = clone.CalculateBoundingBox(); // Add 1 to get the center out of the bounds and another 1 for a gap m_projectionOffset.Y = Math.Abs((int)(boundingBox.Min.Y / MyDefinitionManager.Static.GetCubeSize(clone.GridSizeEnum))) + 2; } InitializeClipboard(); }
public override void UpdateOnceBeforeFrame() { base.UpdateOnceBeforeFrame(); //Only create projections from real projectors if (CubeGrid.Physics != null && m_savedProjection != null) { var clone = (MyObjectBuilder_CubeGrid)m_savedProjection.Clone(); MyEntities.RemapObjectBuilder(clone); m_clipboard.ProcessCubeGrid(clone); m_clipboard.SetGridFromBuilder(clone, Vector3.Zero, 0f); m_originalGridBuilder = m_savedProjection; m_savedProjection = null; InitializeClipboard(); //This will just issue the request //It will only remove it only if conditions are not met a few frames later RequestRemoveProjection(); } UpdateEmissivity(); }
void blueprintScreen_Closed(MyGuiScreenBase source) { PowerReceiver.Update(); UpdateIsWorking(); if (m_clipboard.CopiedGrids.Count == 0 || !IsWorking) { RemoveProjection(false); return; } if (m_clipboard.GridSize != CubeGrid.GridSize) { RemoveProjection(false); ShowNotification(MySpaceTexts.NotificationProjectorGridSize); return; } if (m_clipboard.CopiedGrids.Count > 1) { ShowNotification(MySpaceTexts.NotificationProjectorMultipleGrids); } int largestGridIndex = -1; int largestGridBlockCount = -1; for (int i = 0; i < m_clipboard.CopiedGrids.Count; i++) { int currentGridBlockCount = m_clipboard.CopiedGrids[i].CubeBlocks.Count; if (currentGridBlockCount > largestGridBlockCount) { largestGridBlockCount = currentGridBlockCount; largestGridIndex = i; } } m_originalGridBuilder = (MyObjectBuilder_CubeGrid)m_clipboard.CopiedGrids[largestGridIndex].Clone(); m_clipboard.ProcessCubeGrid(m_clipboard.CopiedGrids[largestGridIndex]); MyEntities.RemapObjectBuilder(m_originalGridBuilder); SyncObject.SendNewBlueprint(m_originalGridBuilder); }
internal void SetNewBlueprint(MyObjectBuilder_CubeGrid gridBuilder) { m_originalGridBuilder = gridBuilder; var clone = (MyObjectBuilder_CubeGrid)gridBuilder.Clone(); MyEntities.RemapObjectBuilder(clone); m_clipboard.ProcessCubeGrid(clone); m_clipboard.SetGridFromBuilder(clone, Vector3.Zero, 0f); InitializeClipboard(); }
public void ActivateShipCreationClipboard(MyObjectBuilder_CubeGrid[] grids, Vector3 centerDeltaDirection, float dragVectorLength) { if (m_shipCreationClipboard.IsActive) return; MySessionComponentVoxelHand.Static.Enabled = false; DeactivateMultiBlockClipboard(); m_shipCreationClipboard.SetGridFromBuilders(grids, centerDeltaDirection, dragVectorLength); }
public CubeGridEntity( MyObjectBuilder_CubeGrid definition, Object backingObject ) : base(definition, backingObject) { _cubeBlockManager = new CubeBlockManager( this, backingObject, CubeGridGetCubeBlocksHashSetMethod ); _cubeBlockManager.Refresh( ); _networkManager = new CubeGridNetworkManager( this ); _managerManager = new CubeGridManagerManager( this, GetManagerManager( ) ); EntityEventManager.EntityEvent newEvent = new EntityEventManager.EntityEvent { type = EntityEventManager.EntityEventType.OnCubeGridCreated, timestamp = DateTime.Now, entity = this, priority = 1 }; EntityEventManager.Instance.AddEvent( newEvent ); _lastNameRefresh = DateTime.Now; _name = "Cube Grid"; }
private void ActivateMultiBlockCreationClipboard(MyObjectBuilder_CubeGrid grid, Vector3 centerDeltaDirection, float dragVectorLength) { if (m_multiBlockCreationClipboard.IsActive) return; MySessionComponentVoxelHand.Static.Enabled = false; m_multiBlockCreationClipboard.SetGridFromBuilder(grid, centerDeltaDirection, dragVectorLength); }
public static List<long> GetAllOwners( MyObjectBuilder_CubeGrid grid ) { Dictionary<long, int> ownerList = new Dictionary<long, int>( ); foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( block.Owner == 0 ) continue; if ( ownerList.ContainsKey( block.Owner ) ) ownerList[ block.Owner ] = ownerList[ block.Owner ] + 1; else ownerList.Add( block.Owner, 1 ); } return ownerList.Select( x => x.Key ).ToList( ); }
public override bool Invoke(string messageText) { #region test if (messageText.Equals("/test", StringComparison.InvariantCultureIgnoreCase)) { // for testing things. //MyAPIGateway.Utilities.ShowMessage("path", MyAPIGateway.Session.CurrentPath); //MyAPIGateway.Utilities.ShowMessage("size1", MyAPIGateway.Utilities.ConfigDedicated.SessionSettings.WorldSizeKm.ToString()); //MyAPIGateway.Utilities.ShowMessage("size2", MyAPIGateway.Session.GetWorld().Checkpoint.Settings.WorldSizeKm.ToString()); IMyConfigDedicated config = null; //List<string> admins = null; try { config = MyAPIGateway.Utilities.ConfigDedicated; config.Load(); //config. } catch (Exception) { MyAPIGateway.Utilities.ShowMessage("Exception", "ConfigDedicated"); //ex.Message); } if (config != null) { try { var players = new List<IMyPlayer>(); MyAPIGateway.Players.GetPlayers(players, p => p != null); MyAPIGateway.Utilities.ShowMessage("Player Count", string.Format("{0}", players.Count)); var identities = new List<IMyIdentity>(); MyAPIGateway.Players.GetAllIdentites(identities); MyAPIGateway.Utilities.ShowMessage("Identities Count", string.Format("{0}", identities.Count)); MyAPIGateway.Utilities.ShowMessage("Admin Count", string.Format("{0}", config.Administrators.Count)); //MyAPIGateway.Utilities.ShowMessage("WorldName", string.Format("{0}", config.WorldName)); //MyAPIGateway.Utilities.ShowMessage("WorldSize", string.Format("{0}", config.SessionSettings.WorldSizeKm)); MyAPIGateway.Utilities.ShowMessage("Mods Count", string.Format("{0}", config.Mods.Count)); //MyAPIGateway.Utilities.ShowMessage("IP", string.Format("{0}", config.IP)); var clients = MyAPIGateway.Session.GetWorld().Checkpoint.Clients; MyAPIGateway.Utilities.ShowMessage("Client Count", clients == null ? "null" : string.Format("{0}", clients.Count)); if (clients != null) { var client = clients.FirstOrDefault(c => c.SteamId == MyAPIGateway.Multiplayer.MyId); if (client != null) { MyAPIGateway.Utilities.ShowMessage("IsAdmin", string.Format("{0}", client.IsAdmin)); } } } catch (Exception) { MyAPIGateway.Utilities.ShowMessage("Exception", "reading config"); //ex.Message); } } return true; } #endregion #region test2 if (messageText.Equals("/test2", StringComparison.InvariantCultureIgnoreCase)) { // for testing things. var count = MyAPIGateway.Utilities.ConfigDedicated.Administrators.Count.ToString(CultureInfo.InvariantCulture); MyAPIGateway.Utilities.ShowMessage("Admins", string.Format("Count {0}", count)); MyAPIGateway.Utilities.ShowMessage("Players", string.Format("Count {0}", MyAPIGateway.Players.Count)); MyAPIGateway.Utilities.ShowMessage("MultiPlayers", string.Format("Count {0}", MyAPIGateway.Multiplayer.Players.Count)); return true; } #endregion #region test3 if (messageText.Equals("/test3", StringComparison.InvariantCultureIgnoreCase)) { // for testing things. MyAPIGateway.Utilities.ShowMessage("MyId", "{0}", MyAPIGateway.Multiplayer.MyId); MyAPIGateway.Utilities.ShowMessage("SteamId", "{0}", MyAPIGateway.Session.Player.SteamUserId); MyAPIGateway.Utilities.ShowMessage("MyName", "{0}", MyAPIGateway.Multiplayer.MyName); MyAPIGateway.Utilities.ShowMessage("IsServer", "{0}", MyAPIGateway.Multiplayer.IsServer); MyAPIGateway.Utilities.ShowMessage("IsServerPlayer", "{0}", MyAPIGateway.Multiplayer.IsServerPlayer(MyAPIGateway.Session.Player.Client)); MyAPIGateway.Utilities.ShowMessage("MultiplayerActive", "{0}", MyAPIGateway.Multiplayer.MultiplayerActive); MyAPIGateway.Utilities.ShowMessage("OnlineMode", "{0}", MyAPIGateway.Session.OnlineMode); MyAPIGateway.Utilities.ShowMessage("IsDedicated", "{0}", MyAPIGateway.Utilities.IsDedicated); //MyAPIGateway.Utilities.ShowMessage("Culture", "{0}", MyTexts.Culture.IetfLanguageTag); MyAPIGateway.Utilities.ShowMessage("Culture", "{0} {1}", CultureInfo.CurrentUICulture, CultureInfo.CurrentUICulture.IetfLanguageTag); var ed = ((MyObjectBuilder_EnvironmentDefinition)MyDefinitionManager.Static.EnvironmentDefinition.GetObjectBuilder()); MyAPIGateway.Utilities.ShowMessage("LargeShipMaxSpeed", "{0}", ed.LargeShipMaxSpeed); MyAPIGateway.Utilities.ShowMessage("SunDirection", "{0} {1} {2}", ed.SunDirection.X, ed.SunDirection.Y, ed.SunDirection.Z); return true; } #endregion #region test4 if (messageText.Equals("/test4", StringComparison.InvariantCultureIgnoreCase)) { var player = MyAPIGateway.Session.Player; if (player != null) { var pos = player.GetPosition(); MyAPIGateway.Utilities.ShowMessage("Player", "pos={0:N},{1:N},{2:N}", pos.X, pos.Y, pos.Z); } var cockpit = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.Ingame.IMyCockpit; var remoteControl = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.Ingame.IMyRemoteControl; var character = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.IMyCharacter; var character2 = MyAPIGateway.Session.ControlledObject as Sandbox.Game.Entities.Character.MyCharacter; var camera = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.IMyCamera; var cameraBlock = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.Ingame.IMyCameraBlock; var cameraController = MyAPIGateway.Session.ControlledObject as Sandbox.ModAPI.Interfaces.IMyCameraController; var spectator = MyAPIGateway.Session.ControlledObject as VRage.MySpectator; if (cockpit != null) { MyAPIGateway.Utilities.ShowMessage("Control", "in cockpit."); } if (remoteControl != null) { MyAPIGateway.Utilities.ShowMessage("Control", "remoting."); } if (character != null) { MyAPIGateway.Utilities.ShowMessage("Control", "character."); } if (character2 != null) { //var pos = character2.PositionComp.GetPosition(); // Uses MyEntity which is not whitelisted. MyAPIGateway.Utilities.ShowMessage("Control", "character2."); } if (camera != null) { MyAPIGateway.Utilities.ShowMessage("Control", "camera."); } if (cameraBlock != null) { MyAPIGateway.Utilities.ShowMessage("Control", "camera block."); } if (cameraController != null) { var pos = cameraController.GetViewMatrix().Translation; MyAPIGateway.Utilities.ShowMessage("Control", "camera controller 1. FPV={0} POS={1:N},{2:N},{3:N}", cameraController.IsInFirstPersonView, pos.X, pos.Y, pos.Z); } if (MyAPIGateway.Session.ControlledObject.Entity is Sandbox.ModAPI.Interfaces.IMyCameraController) { MyAPIGateway.Utilities.ShowMessage("Control", "camera controller 2."); } //MyAPIGateway.Utilities.ShowMessage("Player", "Spectator1. {0}", VRage.Common.MySpectator.Static.IsInFirstPersonView); //System.Windows.Forms.Clipboard.SetText("hello"); if (spectator != null) { MyAPIGateway.Utilities.ShowMessage("Player", "Spectator1."); } if (MyAPIGateway.Session.ControlledObject.Entity is MySpectator) { MyAPIGateway.Utilities.ShowMessage("Player", "Spectator2."); } //else //{ // MyAPIGateway.Utilities.ShowMessage("Player", "other."); //} return true; var playerMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.WorldMatrix; var playerPosition = playerMatrix.Translation + playerMatrix.Forward * 0.5f + playerMatrix.Up * 1.0f; MyAPIGateway.Utilities.ShowMessage("Pos", string.Format("x={0:N},y={1:N},z={2:N} x={3:N},y={4:N},z={5:N}", playerPosition.X, playerPosition.Y, playerPosition.Z, playerMatrix.Forward.X, playerMatrix.Forward.Y, playerMatrix.Forward.Z)); //MyAPIGateway.Utilities.ShowMessage("Up", string.Format("x={0:N},y={1:N},z={2:N}", playerMatrix.Up.X, playerMatrix.Up.Y, playerMatrix.Up.Z)); // TODO: need to properly establish control state and how to tell which state we are in. // Player - First person. // Player - thrid person. // Cockpit - First person. ControlledObject.GetHeadMatrix(true, true, true); // Cockpit - thrid person. ControlledObject.GetHeadMatrix(true, true, true); // Spectator freeview. CameraController.GetViewMatrix() but corrupted pos and vector. // Camera. CameraController.GetViewMatrix() //MyAPIGateway.Session.Player.PlayerCharacter.GetHeadMatrix(true, true, true); //MyAPIGateway.Session.CameraController.GetViewMatrix(); //MyAPIGateway.Session.ControlledObject.GetHeadMatrix(true, true, true); //Sandbox.ModAPI.IMyControllerInfo //? //Sandbox.ModAPI.IMyEntityController //Sandbox.ModAPI.Interfaces.IMyCameraController //Sandbox.ModAPI.Interfaces.IMyControllableEntity // The CameraController.GetViewMatrix appears warped at the moment. //var position = ((IMyEntity)MyAPIGateway.Session.CameraController).GetPosition(); var camMatrix = MyAPIGateway.Session.CameraController.GetViewMatrix(); var camPosition = camMatrix.Translation; MyAPIGateway.Utilities.ShowMessage("Cam", string.Format("x={0:N},y={1:N},z={2:N} x={3:N},y={4:N},z={5:N}", camPosition.X, camPosition.Y, camPosition.Z, camMatrix.Forward.X, camMatrix.Forward.Y, camMatrix.Forward.Z)); //var worldMatrix = MyAPIGateway.Session.ControlledObject.Entity.WorldMatrix; var worldMatrix = MyAPIGateway.Session.ControlledObject.GetHeadMatrix(true, true, true); var position = worldMatrix.Translation; MyAPIGateway.Utilities.ShowMessage("Con", string.Format("x={0:N},y={1:N},z={2:N} x={3:N},y={4:N},z={5:N}", position.X, position.Y, position.Z, worldMatrix.Forward.X, worldMatrix.Forward.Y, worldMatrix.Forward.Z)); //MyAPIGateway.Session.Player.PlayerCharacter.MoveAndRotate(new Vector3(), new Vector2(0, 0), 90f); //MyAPIGateway.Session.Player.PlayerCharacter.MoveAndRotate(new Vector3(), new Vector2(3.14f, 0), 0f); //MyAPIGateway.Session.Player.PlayerCharacter.Up(); // thrust, walk player forward? //MyAPIGateway.Session.Player.PlayerCharacter.Entity.worldmatrix //var character = (MyObjectBuilder_Character)obj; return true; } #endregion #region test5 if (messageText.Equals("/test5", StringComparison.InvariantCultureIgnoreCase)) { var worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, true); // most accurate for player view. var position = worldMatrix.Translation + worldMatrix.Forward * 0.5f; var entites = new HashSet<IMyEntity>(); MyAPIGateway.Entities.GetEntities(entites, e => e != null); var list = new Dictionary<IMyEntity, double>(); foreach (var entity in entites) { var cubeGrid = entity as Sandbox.ModAPI.IMyCubeGrid; // check if the ray comes anywhere near the Grid before continuing. var ray = new RayD(position, worldMatrix.Forward); if (cubeGrid != null && ray.Intersects(entity.WorldAABB).HasValue) { var hit = cubeGrid.RayCastBlocks(position, worldMatrix.Forward * 1000); if (hit.HasValue) { var blocks = new List<Sandbox.ModAPI.IMySlimBlock>(); cubeGrid.GetBlocks(blocks, f => f.FatBlock != null); MyAPIGateway.Utilities.ShowMessage("AABB", string.Format("{0}", entity.WorldAABB)); // var block = blocks[0]; // //block.wo // var hsv = block.FatBlock.GetDiffuseColor(); // MyAPIGateway.Utilities.ShowMessage("Hsv", string.Format("{0},{1},{2} {3}", hsv.X, hsv.Y, hsv.Z, 1.45f)); // var c = VRageMath.ColorExtensions.HSVtoColor(hsv); // MyAPIGateway.Utilities.ShowMessage("Rgb", string.Format("{0},{1},{2}", c.R, c.G, c.B)); } } } return true; } #endregion #region test6 if (messageText.Equals("/test6", StringComparison.InvariantCultureIgnoreCase)) { var entity = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity; //MyAPIGateway.Utilities.ShowMessage("AABB", string.Format("{0}", entity.WorldAABB)); //MyAPIGateway.Utilities.ShowMessage("Size", string.Format("{0}", entity.WorldAABB.Size())); //if (entity is IMyPlayer) // MyAPIGateway.Utilities.ShowMessage("IMyPlayer", "true"); //if (entity is IMyCubeBlock) // MyAPIGateway.Utilities.ShowMessage("IMyCubeBlock", "true"); // Ship //if (entity is IMyCubeGrid) // MyAPIGateway.Utilities.ShowMessage("IMyCubeGrid", "true"); //if (entity is IMyIdentity) // MyAPIGateway.Utilities.ShowMessage("IMyIdentity", "true"); //if (entity is IMyNetworkClient) // MyAPIGateway.Utilities.ShowMessage("IMyNetworkClient", "true"); //if (entity is IMyEntityController) // MyAPIGateway.Utilities.ShowMessage("IMyEntityController", "true"); //if (entity is IMyControllableEntity) // MyAPIGateway.Utilities.ShowMessage("IMyControllableEntity", "true"); // Ship and player //if (entity is IMyCameraController) // MyAPIGateway.Utilities.ShowMessage("IMyCameraController", "true"); // Everything //if (entity is IMyMultiplayer) // MyAPIGateway.Utilities.ShowMessage("IMyMultiplayer", "true"); if (entity is Sandbox.ModAPI.IMyCubeGrid) entity = entity.Parent; if (entity.Physics != null) { var pos = entity.GetPosition(); //var pos = Vector3.Zero; var m = Matrix.CreateWorld(pos, Vector3.Forward, Vector3.Up); entity.SetWorldMatrix(m); //MyAPIGateway.Multiplayer.SendEntitiesCreated(); //entity.LocalMatrix //entity.SetPosition(pos); //if (entity.SyncObject.UpdatesOnlyOnServer) // entity.SyncObject.UpdatePosition(); //MyAPIGateway.Utilities.ShowMessage("Physics=null", string.Format("{0}", phys == null)); MyAPIGateway.Utilities.ShowMessage("LinearVelocity", string.Format("{0}", entity.Physics.LinearVelocity)); //MyAPIGateway.Utilities.ShowMessage("Speed", string.Format("{0}", phys.Speed)); //MyAPIGateway.Utilities.ShowMessage("Mass", string.Format("{0}", phys.Mass)); //phys.AddForce(Sandbox.Engine.Physics.MyPhysicsForceType.ADD_BODY_FORCE_AND_BODY_TORQUE, Vector3.Forward, Vector3.Zero, Vector3.Zero); //phys.LinearVelocity = Vector3.Forward; //phys } //var vm = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, true); // most accurate for player view. return true; } #endregion #region test7 if (messageText.Equals("/test7", StringComparison.InvariantCultureIgnoreCase)) { var character = (MyObjectBuilder_Character)MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.GetObjectBuilder(); //var obj = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.GetObjectBuilder(); var obj = MyAPIGateway.Session.Player.Client as IMyEntity; MyAPIGateway.Utilities.ShowMessage("isNull", string.Format("{0}", obj == null)); //MyAPIGateway.Utilities.ShowMessage("Name", string.Format("{0}", obj.GetType().Name)); return true; } #endregion #region test8 if (messageText.Equals("/test8A", StringComparison.InvariantCultureIgnoreCase)) { var gridBuilder = new MyObjectBuilder_CubeGrid() { PersistentFlags = MyPersistentEntityFlags2.CastShadows | MyPersistentEntityFlags2.InScene, GridSizeEnum = MyCubeSize.Large, IsStatic = true, LinearVelocity = new SerializableVector3(0, 0, 0), AngularVelocity = new SerializableVector3(0, 0, 0), PositionAndOrientation = new MyPositionAndOrientation(Vector3.Zero, Vector3.Forward, Vector3.Up), DisplayName = "test grid" }; Sandbox.Common.ObjectBuilders.MyObjectBuilder_CubeBlock cube = new Sandbox.Common.ObjectBuilders.MyObjectBuilder_CubeBlock(); cube.Min = new SerializableVector3I(0, 0, 0); cube.SubtypeName = "LargeBlockArmorBlock"; cube.ColorMaskHSV = new SerializableVector3(0, -1, 0); cube.ShareMode = MyOwnershipShareModeEnum.None; cube.EntityId = 0; cube.Owner = 0; cube.BlockOrientation = new SerializableBlockOrientation(Base6Directions.Direction.Forward, Base6Directions.Direction.Up); cube.ShareMode = Sandbox.Common.ObjectBuilders.MyOwnershipShareModeEnum.All; gridBuilder.CubeBlocks.Add(cube); // multiple grids... //var tempList = new List<MyObjectBuilder_EntityBase>(); //tempList.Add(gridBuilder); //MyAPIGateway.Entities.RemapObjectBuilderCollection(tempList); //tempList.ForEach(grid => MyAPIGateway.Entities.CreateFromObjectBuilderAndAdd(grid)); //MyAPIGateway.Multiplayer.SendEntitiesCreated(tempList); // Single grid. MyAPIGateway.Entities.RemapObjectBuilder(gridBuilder); MyAPIGateway.Entities.CreateFromObjectBuilderAndAdd(gridBuilder); MyAPIGateway.Multiplayer.SendEntitiesCreated(new List<MyObjectBuilder_EntityBase> { gridBuilder }); MyAPIGateway.Utilities.ShowMessage("OK", "fine"); return true; } if (messageText.Equals("/test8B", StringComparison.InvariantCultureIgnoreCase)) { var entity = Support.FindLookAtEntity(MyAPIGateway.Session.ControlledObject, true, false, false) as Sandbox.ModAPI.IMyCubeGrid; if (entity == null) return false; var gridBuilder = new MyObjectBuilder_CubeGrid() { PersistentFlags = MyPersistentEntityFlags2.CastShadows | MyPersistentEntityFlags2.InScene, GridSizeEnum = MyCubeSize.Large, IsStatic = true, LinearVelocity = new SerializableVector3(0, 0, 0), AngularVelocity = new SerializableVector3(0, 0, 0), PositionAndOrientation = new MyPositionAndOrientation(Vector3.Zero, Vector3.Forward, Vector3.Up), DisplayName = "test grid" }; Sandbox.Common.ObjectBuilders.MyObjectBuilder_CubeBlock cube = new Sandbox.Common.ObjectBuilders.MyObjectBuilder_CubeBlock(); cube.Min = new SerializableVector3I(0, 0, 0); cube.SubtypeName = "LargeBlockArmorBlock"; cube.ColorMaskHSV = new SerializableVector3(0, -1, 0); cube.ShareMode = MyOwnershipShareModeEnum.None; cube.Owner = 0; cube.BlockOrientation = new SerializableBlockOrientation(Base6Directions.Direction.Forward, Base6Directions.Direction.Up); cube.ShareMode = Sandbox.Common.ObjectBuilders.MyOwnershipShareModeEnum.All; gridBuilder.CubeBlocks.Add(cube); //var tempList = new List<MyObjectBuilder_EntityBase>(); //tempList.Add(gridBuilder); //MyAPIGateway.Entities.RemapObjectBuilderCollection(tempList); //no need for this on new object //var newEntity = (IMyCubeGrid)MyAPIGateway.Entities.CreateFromObjectBuilderAndAdd(tempList[0]); //MyAPIGateway.Multiplayer.SendEntitiesCreated(tempList); MyAPIGateway.Entities.RemapObjectBuilder(gridBuilder); var newEntity = (Sandbox.ModAPI.IMyCubeGrid)MyAPIGateway.Entities.CreateFromObjectBuilderAndAdd(gridBuilder); MyAPIGateway.Multiplayer.SendEntitiesCreated(new List<MyObjectBuilder_EntityBase> { gridBuilder }); entity.MergeGrid_MergeBlock(newEntity, new Vector3I(0, 1, 0)); MyAPIGateway.Utilities.ShowMessage("OK", "fine"); return true; } #endregion #region test9 if (messageText.Equals("/test9", StringComparison.InvariantCultureIgnoreCase)) { var allEntites = new HashSet<IMyEntity>(); MyAPIGateway.Entities.GetEntities(allEntites, e => e != null); var sphere = new BoundingSphereD(Vector3D.Zero, 1000000f); var allSphereEntities = MyAPIGateway.Entities.GetEntitiesInSphere(ref sphere); MyAPIGateway.Utilities.ShowMessage("All Entities", String.Format("{0} == {1} ??", allEntites.Count, allSphereEntities.Count)); return true; } #endregion #region test10 if (messageText.StartsWith("/test10 ", StringComparison.InvariantCultureIgnoreCase)) { var match = Regex.Match(messageText, @"/test10\s{1,}(?<Key>.+)", RegexOptions.IgnoreCase); if (match.Success) { var prefabName = match.Groups["Key"].Value; var entities = new HashSet<IMyEntity>(); MyAPIGateway.Entities.GetEntities(entities, e => e is Sandbox.ModAPI.IMyCubeGrid); var idx = Int32.Parse(prefabName); var cubeGrid = (Sandbox.ModAPI.IMyCubeGrid)entities.ToArray()[idx]; var grids = cubeGrid.GetAttachedGrids(); MyAPIGateway.Utilities.ShowMessage("Attached Count", string.Format("{0}", grids.Count)); //foreach (var grid in grids) // MyAPIGateway.Utilities.ShowMessage("Attached", string.Format("{0}", grid.EntityId)); return true; } //var vm = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, true); // most accurate for player view. } #endregion #region test11 if (messageText.Equals("/test11", StringComparison.InvariantCultureIgnoreCase)) { //var identities = new List<IMyIdentity>(); //MyAPIGateway.Players.GetAllIdentites(identities); //var ident = identities.FirstOrDefault(); //var bIdent = ((IMyEntity)ident).GetObjectBuilder(); //MyAPIGateway.Utilities.ShowMessage("IMyIdentity", string.Format("{0}", bIdent.GetType())); var players = new List<IMyPlayer>(); MyAPIGateway.Players.GetPlayers(players, p => p != null); var player = players.FirstOrDefault(); var cpnt = MyAPIGateway.Session.GetCheckpoint("null"); MyAPIGateway.Utilities.ShowMessage("cpnt", cpnt.Clients == null ? "null" : string.Format("{0}", cpnt.Clients.Count)); var c = MyAPIGateway.Session.GetWorld().Checkpoint.Clients; MyAPIGateway.Utilities.ShowMessage("Count", c == null ? "null" : string.Format("{0}", c.Count)); var nc = player.Client; MyAPIGateway.Utilities.ShowMessage("IMyNetworkClient", string.Format("{0}", nc.GetType())); //MyAPIGateway.Utilities.ShowMessage("IMyNetworkClient", string.Format("{0}", nc.GetType().BaseType)); //var bPlayer = ((IMyEntity)nc).GetObjectBuilder(); //MyAPIGateway.Utilities.ShowMessage("IMyPlayer", string.Format("{0}", bPlayer.GetType())); //var vm = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, true); // most accurate for player view. return true; } #endregion #region test12 if (messageText.Equals("/test12", StringComparison.InvariantCultureIgnoreCase)) { var entity = Support.FindLookAtEntity(MyAPIGateway.Session.ControlledObject); var resultList = new List<ITerminalAction>(); if (entity != null) { var displayName = entity.DisplayName; MyAPIGateway.Utilities.ShowMessage("ID", displayName); MyAPIGateway.Utilities.ShowMessage("Components", string.Format("{0}", entity.Components == null)); MyAPIGateway.Utilities.ShowMessage("Hierarchy", string.Format("{0}", entity.Hierarchy == null)); var cockpits = entity.FindWorkingCockpits(); var terminal = (IMyTerminalBlock)cockpits[0]; //cockpits[0] terminal.GetActions(resultList); MyAPIGateway.Utilities.ShowMessage("count", string.Format("{0}", resultList.Count)); } //Vector3D? FindFreePlace(Vector3D basePos, float radius, int maxTestCount = 20, int testsPerDistance = 5, float stepSize = 1f); //MyAPIGateway.Entities.FindFreePlace( //resultList.Clear(); //var myObject = Sandbox.Common.ObjectBuilders.Serializer.MyObjectBuilderSerializer.CreateNewObject(typeof(MyObjectBuilder_Reactor), "SmallBlockLargeGenerator"); //MyAPIGateway.TerminalActionsHelper.GetActions(typeof(MyObjectBuilder_Reactor), resultList); //MyAPIGateway.Utilities.ShowMessage("count", string.Format("{0}", resultList.Count)); //MyAPIGateway.TerminalActionsHelper.GetActions(typeof(IMyMotorStator), resultList); //MyAPIGateway.Utilities.ShowMessage("count", string.Format("{0}", resultList.Count)); //MyAPIGateway.TerminalActionsHelper.GetActions(typeof(IMyFunctionalBlock), resultList); //MyAPIGateway.Utilities.ShowMessage("count", string.Format("{0}", resultList.Count)); //MyAPIGateway.TerminalActionsHelper.GetActions(typeof(IMyTerminalBlock), resultList); //MyAPIGateway.Utilities.ShowMessage("count", string.Format("{0}", resultList.Count)); foreach (var a in resultList) { MyAPIGateway.Utilities.ShowMessage("item", string.Format("{0}={1}", a.Name, a.Id)); } return true; } #endregion #region test13 if (messageText.Equals("/test13", StringComparison.InvariantCultureIgnoreCase)) { var entites = new HashSet<IMyEntity>(); MyAPIGateway.Entities.GetEntities(entites, e => e != null); //var physicalItem = MyDefinitionManager.Static.GetCubeBlockDefinition(new MyDefinitionId(typeof(MyObjectBuilder_SpaceBall), "SpaceBallLarge")); //physicalItem.Public = true; //MyDefinitionManager.Static.EnvironmentDefinition.SmallShipMaxSpeed = 2000; //MyDefinitionManager.Static.EnvironmentDefinition.LargeShipMaxSpeed = 2000; MyAPIGateway.Session.GetCheckpoint("null").GameMode = MyGameModeEnum.Creative; //MyAPIGateway.Session.GetCheckpoint("null").CargoShipsEnabled //MyAPIGateway.Session.GetCheckpoint("null").EnableCopyPaste = true; //MyAPIGateway.Utilities.ShowMessage("Sun Distance", string.Format("{0}", MyDefinitionManager.Static.EnvironmentDefinition.DistanceToSun)); //MyDefinitionManager.Static.EnvironmentDefinition.DirectionToSun = new Vector3(0, 1, 0); foreach (var entity in entites) { var cubeGrid = entity as Sandbox.ModAPI.IMyCubeGrid; if (cubeGrid != null) { var terminalsys = MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(cubeGrid); //MyAPIGateway.Utilities.ShowMessage("Grid count", string.Format("{0} {1} {2}", cubeGrid.DisplayName, terminalsys.Blocks.Count, terminalsys.BlockGroups.Count)); //var blocks = new List<Sandbox.ModAPI.IMySlimBlock>(); //cubeGrid.GetBlocks(blocks, f => f.FatBlock != null && f.FatBlock == MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity); //MyAPIGateway.Utilities.ShowMessage("Pilot count", string.Format("{0}", blocks.Count)); //cubeGrid.GetBlocks(blocks); //foreach (var block in blocks) //{ // cubeGrid.ColorBlocks(block.Position, block.Position, VRageMath.Color.Gold.ToHsvColor()); //} } } return true; } #endregion #region test14 // Tag every floating object in player GPS. if (messageText.Equals("/test14", StringComparison.InvariantCultureIgnoreCase)) { var entites = new HashSet<IMyEntity>(); MyAPIGateway.Entities.GetEntities(entites, e => (e is Sandbox.ModAPI.IMyFloatingObject)); foreach (var entity in entites) { var pos = entity.GetPosition(); var gps = MyAPIGateway.Session.GPS.Create("Floating " + entity.DisplayName, "Some drifting junk", pos, true, false); MyAPIGateway.Session.GPS.AddLocalGps(gps); } return true; } #endregion return false; }
// might not work? -- updated, needs testing public static List<long> GetBigOwners( MyObjectBuilder_CubeGrid grid ) { Dictionary<long, int> ownerList = new Dictionary<long, int>( ); foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( block.Owner == 0 ) continue; if ( ownerList.ContainsKey( block.Owner ) ) ownerList[ block.Owner ] = ownerList[ block.Owner ] + 1; else ownerList.Add( block.Owner, 1 ); } int count = ownerList.OrderBy( x => x.Value ).Select( x => x.Value ).FirstOrDefault( ); return ownerList.OrderBy( x => x.Value ).Where( x => x.Value == count ).Select( x => x.Key ).ToList( ); }
public void SendNewBlueprint(MyObjectBuilder_CubeGrid projectedGrid) { var msg = new NewBlueprintMsg(); msg.EntityId = m_projector.EntityId; msg.ProjectedGrid = projectedGrid; var ack = new NewBlueprintAckMsg(); ack.EntityId = m_projector.EntityId; m_lastSentCubeGrid = projectedGrid; if (Sync.IsServer) { Sync.Layer.SendMessageToAll(ref msg, MyTransportMessageEnum.Success); OnNewBlueprintAck(ref ack, null); } else { Sync.Layer.SendMessageToServer(ref msg, MyTransportMessageEnum.Request); } }
public static bool GetOwner( MyObjectBuilder_CubeGrid grid, out long ownerId ) { ownerId = 0; foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( !( block is MyObjectBuilder_TerminalBlock ) ) continue; MyObjectBuilder_TerminalBlock functional = (MyObjectBuilder_TerminalBlock)block; if ( functional.Owner != 0 ) { ownerId = functional.Owner; return true; } } return false; }
public override void Init(MyObjectBuilder_CubeBlock objectBuilder, MyCubeGrid cubeGrid) { base.Init(objectBuilder, cubeGrid); if (!MyFakes.ENABLE_PROJECTOR_BLOCK) { return; } var projectorBuilder = (MyObjectBuilder_Projector)objectBuilder; if (projectorBuilder.ProjectedGrid != null) { m_projectionOffset = projectorBuilder.ProjectionOffset; m_projectionRotation = projectorBuilder.ProjectionRotation; m_savedProjection = projectorBuilder.ProjectedGrid; m_keepProjection = projectorBuilder.KeepProjection; } PowerReceiver = new MyPowerReceiver( MyConsumerGroupEnum.Utility, false, BlockDefinition.RequiredPowerInput, this.CalculateRequiredPowerInput); PowerReceiver.IsPoweredChanged += PowerReceiver_IsPoweredChanged; IsWorkingChanged += MyProjector_IsWorkingChanged; PowerReceiver.Update(); m_statsDirty = true; UpdateText(); SyncObject = new MySyncProjector(this); NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged; CubeGrid.OnBlockAdded += previewGrid_OnBlockAdded; CubeGrid.OnBlockRemoved += previewGrid_OnBlockRemoved; CubeGrid.OnGridSplit += CubeGrid_OnGridSplit; }
public static bool HasCustomName( MyObjectBuilder_CubeGrid grid, string name, bool exact ) { foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { MyObjectBuilder_TerminalBlock termBlock = block as MyObjectBuilder_TerminalBlock; if ( termBlock != null ) { if ( exact ) { if ( termBlock.CustomName != null && termBlock.CustomName == name ) { return true; } } else { if ( termBlock.CustomName != null && termBlock.CustomName.Contains( name ) ) { return true; } } } } return false; }
private void RemoveProjection(bool keepProjection) { m_hiddenBlock = null; m_clipboard.Deactivate(); if (!keepProjection) { m_clipboard.Clear(); m_originalGridBuilder = null; } UpdateEmissivity(); m_statsDirty = true; UpdateText(); //We call this to disable the controls RaisePropertiesChanged(); }
public static bool HasOwner( MyObjectBuilder_CubeGrid grid ) { foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( !( block is MyObjectBuilder_TerminalBlock ) ) continue; MyObjectBuilder_TerminalBlock functional = (MyObjectBuilder_TerminalBlock)block; if ( functional.Owner != 0 ) return true; } return false; }
internal static void BuildStructureFromCubic(MyObjectBuilder_CubeGrid entity, CubeType[][][] cubic, bool fillObject, SubtypeId blockType, SubtypeId slopeBlockType, SubtypeId cornerBlockType, SubtypeId inverseCornerBlockType) { var xCount = cubic.Length; var yCount = cubic[0].Length; var zCount = cubic[0][0].Length; for (var x = 0; x < xCount; x++) { for (var y = 0; y < yCount; y++) { for (var z = 0; z < zCount; z++) { if ((cubic[x][y][z] != CubeType.None && cubic[x][y][z] != CubeType.Interior) || (cubic[x][y][z] == CubeType.Interior && fillObject)) { MyObjectBuilder_CubeBlock newCube; entity.CubeBlocks.Add(newCube = new MyObjectBuilder_CubeBlock()); if (cubic[x][y][z].ToString().StartsWith("Cube")) { newCube.SubtypeName = blockType.ToString(); } else if (cubic[x][y][z].ToString().StartsWith("Slope")) { newCube.SubtypeName = slopeBlockType.ToString(); } else if (cubic[x][y][z].ToString().StartsWith("NormalCorner")) { newCube.SubtypeName = cornerBlockType.ToString(); } else if (cubic[x][y][z].ToString().StartsWith("InverseCorner")) { newCube.SubtypeName = inverseCornerBlockType.ToString(); } else if (cubic[x][y][z] == CubeType.Interior && fillObject) { newCube.SubtypeName = blockType.ToString(); cubic[x][y][z] = CubeType.Cube; } newCube.EntityId = 0; newCube.BlockOrientation = GetCubeOrientation(cubic[x][y][z]); newCube.Min = new Vector3I(x, y, z); } } } } }
public static bool IsFullOwner( MyObjectBuilder_CubeGrid grid, long ownerId, IMyPlayer factionPlayer = null ) { bool found = false; foreach ( MyObjectBuilder_CubeBlock block in grid.CubeBlocks ) { if ( !( block is MyObjectBuilder_TerminalBlock ) ) continue; MyObjectBuilder_TerminalBlock functional = (MyObjectBuilder_TerminalBlock)block; if ( factionPlayer == null ) { if ( functional.Owner != 0 && functional.Owner != ownerId ) { return false; } else if ( functional.Owner != 0 ) { found = true; } } else { MyRelationsBetweenPlayerAndBlock relation = factionPlayer.GetRelationTo( functional.Owner ); if ( functional.Owner != 0 && ( relation == MyRelationsBetweenPlayerAndBlock.Owner || relation == MyRelationsBetweenPlayerAndBlock.FactionShare ) ) { found = true; } else if ( functional.Owner != 0 && relation != MyRelationsBetweenPlayerAndBlock.FactionShare && relation != MyRelationsBetweenPlayerAndBlock.FactionShare ) { return false; } } } return found; }