void CreatePiece(Building Building, float Xoffset, float Yoffset, float Zoffset, Model PieceModel, Texture2D[] PieceTextures, Vector3 ExplosionPosition, float Force, float Radius, float L, float W, float H) { ExplosionPosition = new Vector3(ExplosionPosition.X, ExplosionPosition.Y - 15, ExplosionPosition.Z); BuildingPiece Piece = new BuildingPiece(parentGame, PieceModel, PieceTextures, NormalDrawing, this, L, W, H); Piece.position = new Vector3( Building.position.X + Xoffset, Building.position.Y + Yoffset, Building.position.Z + Zoffset); Piece.scale = Building.scale; Vector3 ROTATION = Building.rotation; Matrix Orientation = Matrix.CreateFromYawPitchRoll(ROTATION.X, ROTATION.Y, ROTATION.Z); Piece.SetBody(Orientation); Vector3 DIRECTION = Piece.position - ExplosionPosition; DIRECTION.Normalize(); Vector3 ANGLE = DIRECTION; float min = 1.1f; float max = 1.6f; float AMOUNT = (float)(min + (float)random.NextDouble() * (max - min)); //float amount = (float)(min + (float)random.NextDouble() * (max - min)); float DIS = Vector3.Distance(Piece.position, ExplosionPosition); float POWER = Force * (1 - DIS / Radius); Piece.Body.ApplyWorldImpulse(DIRECTION * POWER); Piece.Body.AngularVelocity = (ANGLE * AMOUNT); Piece.Skin.callbackFn += new CollisionCallbackFn(PieceColllisionFunction); //Piece.Body.Immovable = true; PieceList.Add(Piece); }
void CreateBunkerPieces(Building BUILD, Missile MISS, float Force, float Radius) { // x y z CreatePiece(BUILD, 3, 13, -3, BunkerPiece1, BunkerPiece1Textures, MISS.position, Force, Radius, 4, 4, 4); CreatePiece(BUILD, -3, 3, -3, BunkerPiece2, BunkerPiece2Textures, MISS.position, Force, Radius, 4, 4, 4); CreatePiece(BUILD, -3, 9, 3, BunkerPiece3, BunkerPiece3Textures, MISS.position, Force, Radius, 4, 4, 7); CreatePiece(BUILD, -2, 7, 1, BunkerPiece4, BunkerPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, 2, 14, 1, BunkerPiece4, BunkerPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, 2, 5, 2, BunkerPiece4, BunkerPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, -5, 15, -2, BunkerPiece4, BunkerPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, -3, 9, 2, BunkerPiece4, BunkerPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); }
void CreateDepotPieces(Building BUILD, Missile MISS, float Force, float Radius) { // x y z CreatePiece(BUILD, -5, 3, 7, DepotPiece1, DepotPiece1Textures, MISS.position, Force, Radius, 4, 4, 1); CreatePiece(BUILD, 2, 2, -3, DepotPiece2, DepotPiece2Textures, MISS.position, Force, Radius, 3, 3, 1); CreatePiece(BUILD, -3, 5, -7, DepotPiece3, DepotPiece3Textures, MISS.position, Force, Radius, 1, 1, 1); CreatePiece(BUILD, -2, 5, -5, DepotPiece4, DepotPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, 3, 5, -7, DepotPiece3, DepotPiece3Textures, MISS.position, Force, Radius, 1, 1, 1); CreatePiece(BUILD, 2, 5, -5, DepotPiece4, DepotPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); CreatePiece(BUILD, -10, 5, 2, DepotPiece3, DepotPiece3Textures, MISS.position, Force, Radius, 1, 1, 1); CreatePiece(BUILD, 10, 5, 3, DepotPiece4, DepotPiece4Textures, MISS.position, Force, Radius, 2, 2, 2); }
private void SpawnBuildings() { List<EventFlag> FlagList = parentGame.Level_Loader.myLevel.FlagsList; foreach (EventFlag flag in FlagList) foreach (GameEvent evnt in flag.Events) { double ROTATION = (3 + random.NextDouble() * (84 - 3)); EnemySpawn spwn = (evnt.SpawnPoint as EnemySpawn); if (spwn.EnemyStats["Type"] == "BUNKER") { float HEIGHT; Vector3 NORMAL; terrainEngine.GetHeight(spwn.Position, out HEIGHT, out NORMAL); Building building = new Building( parentGame, BunkerModel, BunkerTextures, new Vector3(spwn.Position.X, HEIGHT + 4, spwn.Position.Z), (float)Convert.ToDouble((spwn.EnemyStats["Scale"])), new Vector3( spwn.Rotation.X + MathHelper.ToRadians((float)ROTATION), spwn.Rotation.Y, spwn.Rotation.Z), "BUNKER", this); //+ MathHelper.ToRadians(-90) building.Body.Immovable = true; Buildings.Add(building); ++BuildingRemain; } else if (spwn.EnemyStats["Type"] == "DEPOT") { float HEIGHT; Vector3 NORMAL; terrainEngine.GetHeight(spwn.Position, out HEIGHT, out NORMAL); Building building = new Building( parentGame, DepotModel, DepotTextures, new Vector3(spwn.Position.X, HEIGHT + 1, spwn.Position.Z), (float)Convert.ToDouble((spwn.EnemyStats["Scale"])), new Vector3( spwn.Rotation.X + MathHelper.ToRadians((float)ROTATION), spwn.Rotation.Y, spwn.Rotation.Z), "DEPOT", this); building.Body.Immovable = true; Buildings.Add(building); ++BuildingRemain; } else if (spwn.EnemyStats["Type"] == "RING") { Ring ring = new Ring( parentGame, RingModel, RingTextures, new Vector3(spwn.Position.X, spwn.Position.Y, spwn.Position.Z), (float)Convert.ToDouble((spwn.EnemyStats["Scale"])), new Vector3(spwn.Rotation.X, spwn.Rotation.Y, spwn.Rotation.Z), "RING", this); ring.Body.Immovable = true; Buildings.Add(ring); ++BuildingRemain; } } }