// Read this object from message-in internal override bool Read(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion) { if (base.Read(binaryReader, senderEndPoint, gameVersion) == false) { return(NetworkError()); } // Ship Type MyMwcObjectBuilder_SmallDebris_TypesEnum?debrisType = MyMwcMessageIn.ReadObjectBuilderSmallDebrisTypesEnumEx(binaryReader, senderEndPoint); if (debrisType == null) { return(NetworkError()); } DebrisType = debrisType.Value; MyMwcLog.IfNetVerbose_AddToLog("DebrisType: " + DebrisType); //Immovable bool?immovable = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint); if (immovable == null) { return(NetworkError()); } Immovable = immovable.Value; MyMwcLog.IfNetVerbose_AddToLog("Immovable: " + Immovable); return(true); }
public static MyGuiSmallDebrisHelper GetMyGuiSmallDebrisHelper(MyMwcObjectBuilder_SmallDebris_TypesEnum smallDebrisEnum) { MyGuiSmallDebrisHelper ret; if (m_smallDebrisHelpers.TryGetValue(smallDebrisEnum, out ret)) return ret; else return null; }
public static MyGuiSmallDebrisHelper GetMyGuiSmallDebrisHelper(MyMwcObjectBuilder_SmallDebris_TypesEnum smallDebrisEnum) { MyGuiSmallDebrisHelper ret; if (m_smallDebrisHelpers.TryGetValue(smallDebrisEnum, out ret)) { return(ret); } else { return(null); } }
public static MyModelsEnum GetModelForType(MyMwcObjectBuilder_SmallDebris_TypesEnum smallDebrisEnum) { switch (smallDebrisEnum) { case MyMwcObjectBuilder_SmallDebris_TypesEnum.Cistern: return(MyModelsEnum.cistern); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris1: return(MyModelsEnum.Debris1); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris2: return(MyModelsEnum.Debris2); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris3: return(MyModelsEnum.Debris3); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris4: return(MyModelsEnum.Debris4); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris5: return(MyModelsEnum.Debris5); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris6: return(MyModelsEnum.Debris6); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris7: return(MyModelsEnum.Debris7); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris8: return(MyModelsEnum.Debris8); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris9: return(MyModelsEnum.Debris9); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris10: return(MyModelsEnum.Debris10); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris11: return(MyModelsEnum.Debris11); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris12: return(MyModelsEnum.Debris12); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris13: return(MyModelsEnum.Debris13); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris14: return(MyModelsEnum.Debris14); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris15: return(MyModelsEnum.Debris15); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris16: return(MyModelsEnum.Debris16); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris17: return(MyModelsEnum.Debris17); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris18: return(MyModelsEnum.Debris18); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris19: return(MyModelsEnum.Debris19); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris20: return(MyModelsEnum.Debris20); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris21: return(MyModelsEnum.Debris21); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris22: return(MyModelsEnum.Debris22); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris23: return(MyModelsEnum.Debris23); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris24: return(MyModelsEnum.Debris24); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris25: return(MyModelsEnum.Debris25); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris26: return(MyModelsEnum.Debris26); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris27: return(MyModelsEnum.Debris27); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris28: return(MyModelsEnum.Debris28); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris29: return(MyModelsEnum.Debris29); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris30: return(MyModelsEnum.Debris30); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris31: return(MyModelsEnum.Debris31); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.pipe_bundle: return(MyModelsEnum.pipe_bundle); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.UtilityVehicle_1: return(MyModelsEnum.UtilityVehicle_1); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_1: return(MyModelsEnum.Standard_Container_1); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_2: return(MyModelsEnum.Standard_Container_2); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_3: return(MyModelsEnum.Standard_Container_3); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_4: return(MyModelsEnum.Standard_Container_4); break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris32_pilot: return(MyModelsEnum.Debris32_pilot); break; default: throw new MyMwcExceptionApplicationShouldNotGetHere(); } }
private void AddDebris(MyMwcObjectBuilder_SmallDebris_TypesEnum? tag, Vector2? screenPosition = null) { if (!tag.HasValue) { return; } MyMwcObjectBuilder_SmallDebris smallDebrisBuilder = new MyMwcObjectBuilder_SmallDebris(tag.Value, false, 10000); MyEditor.Static.CreateFromObjectBuilder(smallDebrisBuilder, Matrix.Identity, screenPosition); }
public static MyModelsEnum GetModelForType(MyMwcObjectBuilder_SmallDebris_TypesEnum smallDebrisEnum) { switch (smallDebrisEnum) { case MyMwcObjectBuilder_SmallDebris_TypesEnum.Cistern: return MyModelsEnum.cistern; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris1: return MyModelsEnum.Debris1; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris2: return MyModelsEnum.Debris2; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris3: return MyModelsEnum.Debris3; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris4: return MyModelsEnum.Debris4; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris5: return MyModelsEnum.Debris5; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris6: return MyModelsEnum.Debris6; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris7: return MyModelsEnum.Debris7; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris8: return MyModelsEnum.Debris8; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris9: return MyModelsEnum.Debris9; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris10: return MyModelsEnum.Debris10; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris11: return MyModelsEnum.Debris11; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris12: return MyModelsEnum.Debris12; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris13: return MyModelsEnum.Debris13; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris14: return MyModelsEnum.Debris14; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris15: return MyModelsEnum.Debris15; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris16: return MyModelsEnum.Debris16; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris17: return MyModelsEnum.Debris17; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris18: return MyModelsEnum.Debris18; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris19: return MyModelsEnum.Debris19; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris20: return MyModelsEnum.Debris20; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris21: return MyModelsEnum.Debris21; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris22: return MyModelsEnum.Debris22; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris23: return MyModelsEnum.Debris23; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris24: return MyModelsEnum.Debris24; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris25: return MyModelsEnum.Debris25; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris26: return MyModelsEnum.Debris26; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris27: return MyModelsEnum.Debris27; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris28: return MyModelsEnum.Debris28; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris29: return MyModelsEnum.Debris29; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris30: return MyModelsEnum.Debris30; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris31: return MyModelsEnum.Debris31; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.pipe_bundle: return MyModelsEnum.pipe_bundle; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.UtilityVehicle_1: return MyModelsEnum.UtilityVehicle_1; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_1: return MyModelsEnum.Standard_Container_1; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_2: return MyModelsEnum.Standard_Container_2; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_3: return MyModelsEnum.Standard_Container_3; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Standard_Container_4: return MyModelsEnum.Standard_Container_4; break; case MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris32_pilot: return MyModelsEnum.Debris32_pilot; break; default: throw new MyMwcExceptionApplicationShouldNotGetHere(); } }
internal override void SetObjectBuilderIdInternal(int?objectBuilderId) { DebrisType = (MyMwcObjectBuilder_SmallDebris_TypesEnum)Convert.ToUInt16(objectBuilderId); }
public MyMwcObjectBuilder_SmallDebris(MyMwcObjectBuilder_SmallDebris_TypesEnum debrisType, bool immovable, float mass) { DebrisType = debrisType; Immovable = immovable; Mass = mass; }
internal override void SetObjectBuilderIdInternal(int? objectBuilderId) { DebrisType = (MyMwcObjectBuilder_SmallDebris_TypesEnum) Convert.ToUInt16(objectBuilderId); }
// Read this object from message-in internal override bool Read(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion) { if (base.Read(binaryReader, senderEndPoint, gameVersion) == false) return NetworkError(); // Ship Type MyMwcObjectBuilder_SmallDebris_TypesEnum? debrisType = MyMwcMessageIn.ReadObjectBuilderSmallDebrisTypesEnumEx(binaryReader, senderEndPoint); if (debrisType == null) return NetworkError(); DebrisType = debrisType.Value; MyMwcLog.IfNetVerbose_AddToLog("DebrisType: " + DebrisType); //Immovable bool? immovable = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint); if (immovable == null) return NetworkError(); Immovable = immovable.Value; MyMwcLog.IfNetVerbose_AddToLog("Immovable: " + Immovable); return true; }
private static void AddDebrisToList(List<MyMwcObjectBuilder_SmallDebris> list, MyMwcObjectBuilder_SmallDebris_TypesEnum debrisType, Vector3 position) { var debris = new MyMwcObjectBuilder_SmallDebris(debrisType, false, 10000); debris.PositionAndOrientation.Forward = Vector3.Forward; debris.PositionAndOrientation.Up = Vector3.Up; debris.PositionAndOrientation.Position = position; list.Add(debris); }
// Use only for quick test or trailer animations public MySmallDebris CreateFakeSmallDebris(string hudLabelText, MyMwcObjectBuilder_SmallDebris_TypesEnum debrisType, Vector3 position, bool immovable) { MySmallDebris debris = (MySmallDebris)MyEntities.CreateFromObjectBuilderAndAdd(hudLabelText, new MyMwcObjectBuilder_SmallDebris(debrisType, immovable, 10000), Matrix.CreateWorld(position, Vector3.Forward, Vector3.Up)); MyEntities.TestEntityAfterInsertionForCollision(debris); return debris; }
public static void WriteObjectBuilderSmallDebrisTypesEnum(MyMwcObjectBuilder_SmallDebris_TypesEnum val, BinaryWriter binaryWriter) { binaryWriter.Write((ushort)val); }
public static void Update() { /* * foreach (var pair in m_usedCoords) * { * pair.Value.MarkForClose(); * } * * m_usedCoords.Clear(); */ if (!MySector.DebrisProperties.Enabled || !MinerWars.AppCode.Game.Render.MyRenderConstants.RenderQualityProfile.EnableFlyingDebris) { return; } MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("MyDebrisField.Update"); if ((lastDustFieldCountInDirectionHalf != DustFieldCountInDirectionHalf) || (lastDistanceBetween != DistanceBetween)) { lastDistanceBetween = DistanceBetween; lastDustFieldCountInDirectionHalf = DustFieldCountInDirectionHalf; // Fill 3D array with random values from interval <0..1> m_random = new float[DustFieldCountInDirection][][]; for (int x = 0; x < m_random.Length; x++) { m_random[x] = new float[DustFieldCountInDirection][]; for (int y = 0; y < m_random.Length; y++) { m_random[x][y] = new float[DustFieldCountInDirection]; for (int z = 0; z < m_random.Length; z++) { m_random[x][y][z] = MyMwcUtils.GetRandomFloat(0, 1); } } } } // Update helper frustum and then its bounding box m_helperBoundingSphere = new BoundingSphere(MySession.PlayerShip.GetPosition(), MaxDistance); BoundingBox helperBoundingBox = BoundingBox.CreateFromSphere(m_helperBoundingSphere); MyMwcVector3Int minCoord = GetMetersToDustFieldCoord(ref helperBoundingBox.Min); MyMwcVector3Int maxCoord = GetMetersToDustFieldCoord(ref helperBoundingBox.Max); m_entitiesToRemove.Clear(); m_entitiesToRemove.AddRange(m_usedCoords.Keys); BoundingSphere collisionBoundingSphere = new BoundingSphere(MySession.PlayerShip.GetPosition(), MaxDistance / 3); BoundingBox helperCollisionBoundingBox = BoundingBox.CreateFromSphere(m_helperBoundingSphere); MyEntities.GetCollisionsInBoundingBox(ref helperCollisionBoundingBox, m_list); bool newDebrisAllowed = true; foreach (MyRBElement element in m_list) { MyEntity entity = ((MinerWars.AppCode.Game.Physics.MyPhysicsBody)element.GetRigidBody().m_UserData).Entity; if ((entity is MyVoxelMap) || (entity is MinerWars.AppCode.Game.Prefabs.MyPrefabBase)) { newDebrisAllowed = false; } } MyMwcVector3Int tempCoord; for (tempCoord.X = minCoord.X; tempCoord.X <= maxCoord.X; tempCoord.X++) { for (tempCoord.Y = minCoord.Y; tempCoord.Y <= maxCoord.Y; tempCoord.Y++) { for (tempCoord.Z = minCoord.Z; tempCoord.Z <= maxCoord.Z; tempCoord.Z++) { // Position of this particle Vector3 position; position.X = tempCoord.X * DistanceBetween; position.Y = tempCoord.Y * DistanceBetween; position.Z = tempCoord.Z * DistanceBetween; // Get pseudo-random number. It's randomness is based on 3D position, so values don't change between draw calls. float pseudoRandomVariationMod = m_random[Math.Abs(tempCoord.X) % m_random.Length][Math.Abs(tempCoord.Y) % m_random.Length][Math.Abs(tempCoord.Z) % m_random.Length]; // Alter position by randomness position.X += MathHelper.Lerp(-DistanceBetweenHalf, +DistanceBetweenHalf, pseudoRandomVariationMod); position.Y += MathHelper.Lerp(-DistanceBetweenHalf, +DistanceBetweenHalf, pseudoRandomVariationMod); position.Z += MathHelper.Lerp(-DistanceBetweenHalf, +DistanceBetweenHalf, pseudoRandomVariationMod); // Distance to particle float distance; Vector3 center = MySession.PlayerShip.GetPosition(); Vector3.Distance(ref center, ref position, out distance); if (distance > MaxDistance) { continue; } // Pseudo-random color and alpha float pseudoRandomColor = MathHelper.Lerp(0.1f, 0.2f, pseudoRandomVariationMod); //MathHelper.Lerp(0.2f, 0.3f, pseudoRandomVariationMod); //float pseudoRandomAlpha = 0.5f; //0.4f; // 0.2f;// MathHelper.Lerp(0.2f, 0.3f, pseudoRandomVariationMod); //Remove only entities outside distance, not frustum (looks better) m_entitiesToRemove.Remove(tempCoord); if (MyCamera.GetBoundingFrustum().Contains(position) == ContainmentType.Disjoint) { continue; } float alpha = 0; if (distance < FullScaleDistance) { alpha = 1; } else if ((distance >= FullScaleDistance) && (distance < MaxDistance)) { alpha = 1 - MathHelper.Clamp((distance - FullScaleDistance) / (MaxDistance - FullScaleDistance), 0, 1); } else { alpha = 0; } MyEntity entity; m_usedCoords.TryGetValue(tempCoord, out entity); float scale = MathHelper.Lerp(0.2f, 1.0f, alpha); if (entity == null) { if (!newDebrisAllowed) { continue; } if (alpha > 0.2f) { continue; //it would be popping } MinerWars.CommonLIB.AppCode.ObjectBuilders.MyMwcObjectBuilder_Base debrisBuilder = null; if (MyMwcUtils.GetRandomInt(2) % 2 == 0) { entity = MyExplosionDebrisVoxel.Allocate(); if (entity == null) { continue; } int voxelMatEnumIndex = (int)MyMwcUtils.GetRandomShort((short)0, (short)(MySector.DebrisProperties.DebrisVoxelMaterials.Length)); MyMwcVoxelMaterialsEnum voxelMatEnum = (MyMwcVoxelMaterialsEnum)MySector.DebrisProperties.DebrisVoxelMaterials.GetValue(voxelMatEnumIndex); ((MyExplosionDebrisVoxel)entity).Start(position, 1, voxelMatEnum, MyGroupMask.Empty, false); MyEntities.Add(entity); } else { int debrisEnumIndex = (int)MyMwcUtils.GetRandomShort((short)0, (short)(MySector.DebrisProperties.DebrisEnumValues.Length)); MyMwcObjectBuilder_SmallDebris_TypesEnum debrisEnum = (MyMwcObjectBuilder_SmallDebris_TypesEnum)MySector.DebrisProperties.DebrisEnumValues.GetValue(debrisEnumIndex); debrisBuilder = new MyMwcObjectBuilder_SmallDebris(debrisEnum, true, 0); //MyMwcObjectBuilder_SmallDebris debrisBuilder = new MyMwcObjectBuilder_SmallDebris(MyMwcObjectBuilder_SmallDebris_TypesEnum.Debris32_pilot, true, 0); entity = MyEntities.CreateFromObjectBuilderAndAdd(null, debrisBuilder, Matrix.CreateWorld(position, MyMwcUtils.GetRandomVector3Normalized(), MyMwcUtils.GetRandomVector3Normalized())); } entity.Save = false; entity.CastShadows = false; m_usedCoords.Add(tempCoord, entity); } if (entity.Physics != null && entity.Physics.Enabled == true) { entity.Physics.Enabled = false; } /* * if (!(entity is MyExplosionDebrisVoxel) && (distance < FullScaleDistance / 2.0f)) * { * if (entity.Physics == null) * { * entity.InitBoxPhysics(MyMaterialType.METAL, entity.ModelCollision, 500, 0, MyConstants.COLLISION_LAYER_MODEL_DEBRIS, RigidBodyFlag.RBF_DEFAULT); * } * if (entity.Physics.Enabled == false) * { * entity.Physics.Clear(); * entity.Physics.Enabled = true; * } * }*/ /* * else * { * if (entity.Physics != null && entity.Physics.Enabled) * { * entity.Physics.Enabled = false; * } * } */ if (entity is MyExplosionDebrisVoxel) { scale *= 0.08f; } entity.Scale = scale; /* * if (entity.Physics == null && distance < FullScaleDistance / 3) * { * entity.InitBoxPhysics(MyMaterialType.METAL, entity.ModelLod0, 100, MyPhysicsConfig.DefaultAngularDamping, MyConstants.COLLISION_LAYER_ALL, RigidBodyFlag.RBF_DEFAULT); * entity.Physics.Enabled = true; * } */ } } } foreach (MyMwcVector3Int positionToRemove in m_entitiesToRemove) { MyEntity entity = m_usedCoords[positionToRemove]; /* * if (entity.Physics != null && entity.Physics.LinearVelocity.LengthSquared() > 0.1f) * { * // Particles.MyParticleEffect effect = Particles.MyParticlesManager.CreateParticleEffect((int)MyParticleEffectsIDEnum.Explosion_Missile); * // effect.WorldMatrix = entity.WorldMatrix; * } */ entity.MarkForClose(); m_usedCoords.Remove(positionToRemove); } MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().EndProfilingBlock(); }