public override void Init(MyObjectBuilder_CubeBlock objectBuilder, MyCubeGrid cubeGrid) { InitializeSinkComponent(); base.Init(objectBuilder, cubeGrid); if (CubeGrid.CreatePhysics) { // Put on my fake, because it does performance issues if (MyFakes.ENABLE_GRAVITY_PHANTOM) { var shape = CreateFieldShape(); Physics = new Sandbox.Engine.Physics.MyPhysicsBody(this, RigidBodyFlag.RBF_KINEMATIC); Physics.IsPhantom = true; Physics.CreateFromCollisionObject(shape, PositionComp.LocalVolume.Center, WorldMatrix, null, Sandbox.Engine.Physics.MyPhysics.CollisionLayers.GravityPhantomLayer); shape.Base.RemoveReference(); Physics.Enabled = IsWorking; } NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME; SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged; ResourceSink.Update(); } m_soundEmitter = new MyEntity3DSoundEmitter(this, true); m_baseIdleSound.Init("BlockGravityGen"); }
public static MyObjectBuilder_CubeBlock Upgrade(MyObjectBuilder_CubeBlock cubeBlock, MyObjectBuilderType newType, string newSubType) { var upgraded = MyObjectBuilderSerializer.CreateNewObject(newType, newSubType) as MyObjectBuilder_CubeBlock; if (upgraded == null) { Debug.Fail("Cannot upgrade cube block, upgraded block is not derived from " + typeof(MyObjectBuilder_CubeBlock).Name); return null; } upgraded.EntityId = cubeBlock.EntityId; upgraded.Min = cubeBlock.Min; upgraded.m_orientation = cubeBlock.m_orientation; upgraded.IntegrityPercent = cubeBlock.IntegrityPercent; upgraded.BuildPercent = cubeBlock.BuildPercent; upgraded.BlockOrientation = cubeBlock.BlockOrientation; upgraded.ConstructionInventory = cubeBlock.ConstructionInventory; upgraded.ColorMaskHSV = cubeBlock.ColorMaskHSV; return upgraded; }
public override void Init(MyObjectBuilder_CubeBlock builder, MyCubeGrid cubeGrid) { base.Init(builder, cubeGrid); LoadDummies(); }
public MyObjectBuilder_CubeGrid BuildEntity() { var entity = new MyObjectBuilder_CubeGrid { EntityId = SpaceEngineersApi.GenerateEntityId(IDType.ENTITY), PersistentFlags = MyPersistentEntityFlags2.CastShadows | MyPersistentEntityFlags2.InScene, Skeleton = new System.Collections.Generic.List<BoneInfo>(), LinearVelocity = new VRageMath.Vector3(0, 0, 0), AngularVelocity = new VRageMath.Vector3(0, 0, 0) }; var blockPrefix = ""; switch (ClassType) { case ImportImageClassType.SmallShip: entity.GridSizeEnum = MyCubeSize.Small; blockPrefix += "Small"; entity.IsStatic = false; break; case ImportImageClassType.LargeShip: entity.GridSizeEnum = MyCubeSize.Large; blockPrefix += "Large"; entity.IsStatic = false; break; case ImportImageClassType.Station: entity.GridSizeEnum = MyCubeSize.Large; blockPrefix += "Large"; entity.IsStatic = true; Position = Position.RoundOff(MyCubeSize.Large.ToLength()); Forward = Forward.RoundToAxis(); Up = Up.RoundToAxis(); break; } switch (ArmorType) { case ImportArmorType.Heavy: blockPrefix += "HeavyBlockArmor"; break; case ImportArmorType.Light: blockPrefix += "BlockArmor"; break; } entity.PositionAndOrientation = new MyPositionAndOrientation { // TODO: reposition based scale. Position = Position.ToVector3D(), Forward = Forward.ToVector3(), Up = Up.ToVector3() }; // Large|BlockArmor|Corner // Large|RoundArmor_|Corner // Large|HeavyBlockArmor|Block, // Small|BlockArmor|Slope, // Small|HeavyBlockArmor|Corner, entity.CubeBlocks = new System.Collections.Generic.List<MyObjectBuilder_CubeBlock>(); var image = ImageHelper.ResizeImage(_sourceImage, NewImageSize.Size); using (var palatteImage = new Bitmap(image)) { // Optimal order load. from grid coordinate (0,0,0) and up. for (var x = palatteImage.Width - 1; x >= 0; x--) { for (var y = palatteImage.Height - 1; y >= 0; y--) { const int z = 0; var color = palatteImage.GetPixel(x, y); // Specifically ignore anything with less than half "Transparent" Alpha. if (IsAlphaLevel && color.A < AlphaLevel) continue; if (IsKeyColor && color.R == KeyColor.R && color.G == KeyColor.G && color.B == KeyColor.B) continue; // Parse the string through the Enumeration to check that the 'subtypeid' is still valid in the game engine. var armor = (SubtypeId)Enum.Parse(typeof(SubtypeId), blockPrefix + "Block"); MyObjectBuilder_CubeBlock newCube; entity.CubeBlocks.Add(newCube = new MyObjectBuilder_CubeBlock()); newCube.SubtypeName = armor.ToString(); newCube.EntityId = 0; newCube.BlockOrientation = Modelling.GetCubeOrientation(CubeType.Cube); newCube.Min = new VRageMath.Vector3I(palatteImage.Width - x - 1, palatteImage.Height - y - 1, z); newCube.ColorMaskHSV = color.ToSandboxHsvColor(); } } } return entity; }
public void Init(MyObjectBuilder_CubeBlock builder, IMyCubeGrid cubeGrid) { if(cubeGrid is MyCubeGrid) Init(builder, cubeGrid as MyCubeGrid); }
void IMyCubeBlock.Init(MyObjectBuilder_CubeBlock builder, IMyCubeGrid cubeGrid) { Init(builder, cubeGrid); }
IMySlimBlock IMyCubeGrid.AddBlock(MyObjectBuilder_CubeBlock objectBuilder, bool testMerge) { return AddBlock(objectBuilder, testMerge); }