public void UpdateVertexData(Room currentRoom) { if (baseTriangleList == null || staticObject == false) { Engine.debug_blocksGenerated++; baseTriangleList = new List<VertexPositionColorNormalTexture>(); sideTriangleList = new List<VertexPositionColorNormalTexture>(); List<Vertex> vList = new List<Vertex>(); vList.Add(edges[0].start); vList.Add(edges[1].start); vList.Add(edges[2].start); vList.Add(edges[3].start); Color powerUpColor = GetCurrentColor(currentRoom); if (scales) { if (staticObject == false) { currentRoom.AddBlockToTriangleList2(vList, powerUpColor, depth, baseTriangleList); currentRoom.AddBlockSidesToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, sideTriangleList); } else { currentRoom.AddBlockToTriangleList2(vList, powerUpColor, depth, baseTriangleList); currentRoom.AddBlockSidesToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, sideTriangleList); } } else { if (staticObject == false) { currentRoom.AddBlockToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, baseTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, sideTriangleList); } else { currentRoom.AddBlockToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, baseTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, powerUpColor, depth, Room.plateTexCoords, sideTriangleList); } } if (staticObject == false) { baseTriangleArray = baseTriangleList.ToArray(); sideTriangleArray = sideTriangleList.ToArray(); } else { if (wallType == VL.WallType.Plate || wallType == VL.WallType.Cargo || wallType == VL.WallType.Crate) { for (int i = 0; i < baseTriangleList.Count(); i++) { int index = (int)wallType; currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i] = baseTriangleList[i]; } for (int i = 0; i < sideTriangleList.Count(); i++) { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i] = sideTriangleList[i]; } } else if (wallType == VL.WallType.Gearslot) { for (int i = 0; i < baseTriangleList.Count(); i++) { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i] = baseTriangleList[i]; } for (int i = 0; i < sideTriangleList.Count(); i++) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i] = sideTriangleList[i]; } } else { for(int i = 0; i < baseTriangleList.Count(); i++) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i] = baseTriangleList[i]; } for (int i = 0; i < sideTriangleList.Count(); i++) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + baseTriangleList.Count() + i] = sideTriangleList[i]; } } } } if (currentRoom.refreshVertices == true && staticObject == true) { Color powerUpColor = GetCurrentColor(currentRoom); if (wallType == VL.WallType.Plate || wallType == VL.WallType.Cargo || wallType == VL.WallType.Crate) { for (int i = 0; i < baseTriangleList.Count(); i++) { if (baseTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal); } } for (int i = 0; i < sideTriangleList.Count(); i++) { if (sideTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i].Color = FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal); } } } else if (wallType == VL.WallType.Gearslot) { for (int i = 0; i < baseTriangleList.Count(); i++) { if (baseTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)VL.WallType.FancyPlate][cacheOffset[(int)VL.WallType.FancyPlate] + i].Color = FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal); } } for (int i = 0; i < sideTriangleList.Count(); i++) { if (sideTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal); } } } else { for (int i = 0; i < baseTriangleList.Count(); i++) { if (baseTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + i].Color = FakeShader.Shade(powerUpColor, baseTriangleList[i].Normal); } } for (int i = 0; i < sideTriangleList.Count(); i++) { if (sideTriangleList[i].Color.A == 254) { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + baseTriangleList.Count() + i].Color = FakeShader.RearShade(FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal)); } else { currentRoom.masterBlockArray[(int)wallType][cacheOffset[(int)wallType] + baseTriangleList.Count() + i].Color = FakeShader.Shade(powerUpColor, sideTriangleList[i].Normal); } } } } }
public void UpdateVertexData(Room currentRoom) { if (baseTriangleList == null || dynamic == true || refreshVertexData == true) { Engine.debug_updateDoodadVertexData++; refreshVertexData = false; baseTriangleList = new List<VertexPositionColorNormalTexture>(); dynamicFancyTriangleList = new List<VertexPositionColorNormalTexture>(); dynamicBrickTriangleList = new List<VertexPositionColorNormalTexture>(); decalList = new List<VertexPositionColorNormalTexture>(); confirmButtonsList = new List<VertexPositionColorNormalTexture>(); loadButtonsList = new List<VertexPositionColorNormalTexture>(); useButtonList = new List<VertexPositionColorNormalTexture>(); xEquipButtonList = new List<VertexPositionColorNormalTexture>(); yEquipButtonList = new List<VertexPositionColorNormalTexture>(); spriteList = new List<VertexPositionColorNormalTexture>(); beamList = new List<VertexPositionColorNormalTexture>(); List<Vertex> vList = new List<Vertex>(); vList.Add(new Vertex(position, up + right)); vList.Add(new Vertex(position, up + left)); vList.Add(new Vertex(position, down + left)); vList.Add(new Vertex(position, down + right)); #region helpIcons if (helpIconTime != 0) { if (type == VL.DoodadType.LoadStation) { float size = 2*((float)(helpIconTime)) / helpIconMaxTime; List<Vertex> XButtonList = new List<Vertex>(); XButtonList.Add(new Vertex(position, size * up + size * right + up + 2f * left)); XButtonList.Add(new Vertex(position, size * up + size * left + up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * left + up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * right + up + 2f * left)); List<Vertex> YButtonList = new List<Vertex>(); YButtonList.Add(new Vertex(position, size * up + size * right + 3 * up)); YButtonList.Add(new Vertex(position, size * up + size * left + 3 * up)); YButtonList.Add(new Vertex(position, size * down + size * left + 3 * up)); YButtonList.Add(new Vertex(position, size * down + size * right + 3 * up)); List<Vertex> BButtonList = new List<Vertex>(); BButtonList.Add(new Vertex(position, size * up + size * right + 5f * up + 2f * right)); BButtonList.Add(new Vertex(position, size * up + size * left + 5f * up + 2f * right)); BButtonList.Add(new Vertex(position, size * down + size * left + 5f * up + 2f * right)); BButtonList.Add(new Vertex(position, size * down + size * right + 5f * up + 2f * right)); if (Engine.controlType == ControlType.GamePad) { currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.White, .55f, Ability.texCoordList[25], decalList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.White, .55f, Ability.texCoordList[27], decalList, true); } if (Engine.controlType == ControlType.KeyboardOnly) { currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.Blue, .55f, Ability.texCoordList[49], decalList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.Yellow, .55f, Ability.texCoordList[51], decalList, true); } if (Engine.controlType == ControlType.MouseAndKeyboard) { XButtonList = new List<Vertex>(); XButtonList.Add(new Vertex(position, size * up + size * right + 5f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * up + size * left + 5f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * left + 5f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * right + 5f * up + 2f * left)); YButtonList = new List<Vertex>(); YButtonList.Add(new Vertex(position, size * up + size * right + 5f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * up + size * left + 5f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * down + size * left + 5f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * down + size * right + 5f * up + 2f * right)); BButtonList = new List<Vertex>(); BButtonList.Add(new Vertex(position, size * up + size * right - 2.5f * up + 2f * right)); BButtonList.Add(new Vertex(position, size * up + size * left - 2.5f * up + 2f * left)); BButtonList.Add(new Vertex(position, size * down + size * left - 2.5f * up + 2f * left)); BButtonList.Add(new Vertex(position, size * down + size * right - 2.5f * up + 2f * right)); currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.Blue, .55f, SaveGameText.okTexCoords, loadButtonsList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.Yellow, .55f, SaveGameText.cancelTexCoords, loadButtonsList, true); if (SaveGameText.expertAvailable && SaveGameText.activeSaveSlot > -1 && SaveGameText.saveSummaryData[SaveGameText.activeSaveSlot].empty) currentRoom.AddBlockFrontToTriangleList(BButtonList, Color.Red, .55f, SaveGameText.extraTexCoords, loadButtonsList, true); } } else if ((isStation == true && type != VL.DoodadType.ItemStation) || type == VL.DoodadType.Holoprojector || type == VL.DoodadType.Vortex || type == VL.DoodadType.JumpPad) { float size = ((float)(helpIconTime)) / helpIconMaxTime; List<Vertex> BButtonList = new List<Vertex>(); BButtonList.Add(new Vertex(position, size * up + size * right + up + 2.3f * right)); BButtonList.Add(new Vertex(position, size * up + size * left + up + 2.3f * right)); BButtonList.Add(new Vertex(position, size * down + size * left + up + 2.3f * right)); BButtonList.Add(new Vertex(position, size * down + size * right + up + 2.3f * right)); if (Engine.controlType == ControlType.GamePad) currentRoom.AddBlockFrontToTriangleList(BButtonList, Color.White, .55f, Room.plateTexCoords, useButtonList, true); if (Engine.controlType == ControlType.KeyboardOnly) currentRoom.AddBlockFrontToTriangleList(BButtonList, Color.Red, .55f, Room.plateTexCoords, useButtonList, true); if (Engine.controlType == ControlType.MouseAndKeyboard) currentRoom.AddBlockFrontToTriangleList(BButtonList, Color.Red, .55f, Room.plateTexCoords, useButtonList, true); } else if (type == VL.DoodadType.ItemStation) { float size = ((float)(helpIconTime)) / helpIconMaxTime; List<Vertex> XButtonList = new List<Vertex>(); XButtonList.Add(new Vertex(position, size * up + size * right + up + 2f * left)); XButtonList.Add(new Vertex(position, size * up + size * left + up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * left + up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * right + up + 2f * left)); List<Vertex> YButtonList = new List<Vertex>(); YButtonList.Add(new Vertex(position, size * up + size * right + 3 * up)); YButtonList.Add(new Vertex(position, size * up + size * left + 3 * up)); YButtonList.Add(new Vertex(position, size * down + size * left + 3 * up)); YButtonList.Add(new Vertex(position, size * down + size * right + 3 * up)); if (Engine.controlType == ControlType.GamePad) { currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.White, .55f, Room.plateTexCoords, xEquipButtonList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.White, .55f, Room.plateTexCoords, yEquipButtonList, true); } if (Engine.controlType == ControlType.KeyboardOnly) { currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.Blue, .55f, Room.plateTexCoords, xEquipButtonList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.Yellow, .55f, Room.plateTexCoords, yEquipButtonList, true); } if (Engine.controlType == ControlType.MouseAndKeyboard) { XButtonList = new List<Vertex>(); XButtonList.Add(new Vertex(position, size * up + size * right + 2f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * up + size * left + 2f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * left + 2f * up + 2f * left)); XButtonList.Add(new Vertex(position, size * down + size * right + 2f * up + 2f * left)); YButtonList = new List<Vertex>(); YButtonList.Add(new Vertex(position, size * up + size * right + 2f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * up + size * left + 2f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * down + size * left + 2f * up + 2f * right)); YButtonList.Add(new Vertex(position, size * down + size * right + 2f * up + 2f * right)); currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.Blue, .55f, Room.plateTexCoords, xEquipButtonList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.Yellow, .55f, Room.plateTexCoords, yEquipButtonList, true); currentRoom.AddBlockFrontToTriangleList(XButtonList, Color.White, .55f, Room.plateTexCoords, xEquipButtonList, true); currentRoom.AddBlockFrontToTriangleList(YButtonList, Color.White, .55f, Room.plateTexCoords, yEquipButtonList, true); } } } #endregion if (isPowerStation) { if (orbsRemaining > 0) { currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } else { currentRoom.AddBlockToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } } else if (type == VL.DoodadType.SwitchStation) { if (targetDoodad != null) { if (targetDoodad.currentBehavior.id == targetBehavior) { currentRoom.AddBlockToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } else { currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } } if (targetBlock != null) { if (targetBlock.currentBehavior.id == targetBehavior) { currentRoom.AddBlockToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } else { currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } } if (targetEdge != null) { if (targetEdge.currentBehavior.id == targetBehavior) { currentRoom.AddBlockToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } else { currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList, false); } } } else if (type == VL.DoodadType.JumpStation) { float jumpVel = (Engine.player.jumpDestination - Engine.player.jumpSource).Length() / (1f * Player.launchMaxTime); float transitionTime = 1f / Math.Abs(stateTransitionVelocity); float maxExtend = jumpVel * transitionTime; if (active == true) { currentRoom.AddBlockToTriangleList(vList, activeColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth + maxExtend * stateTransition + .01f, Room.plateTexCoords, decalList, true); } else { currentRoom.AddBlockToTriangleList(vList, baseColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth + maxExtend * stateTransition + .01f, Room.plateTexCoords, decalList, true); } } else if (type == VL.DoodadType.JumpPad) { float jumpVel = (Engine.player.jumpDestination - Engine.player.jumpSource).Length() / (1f * Player.launchMaxTime); float transitionTime = 1f / Math.Abs(stateTransitionVelocity); float maxExtend = jumpVel * transitionTime; if (active == true) { currentRoom.AddBlockToTriangleList(vList, activeColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockFrontToTriangleList(vList, activeColor, depth + maxExtend * stateTransition + .01f, Room.plateTexCoords, decalList, true); } else { currentRoom.AddBlockToTriangleList(vList, baseColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth + maxExtend * stateTransition, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth + maxExtend * stateTransition + .01f, Room.plateTexCoords, decalList, true); } } else if (type == VL.DoodadType.Brick) { if (active == true) { Color breakColor = Color.Transparent; breakColor.R = (Byte)((breakTime * breakColor.R + (maxBreakTime - breakTime) * baseColor.R) / maxBreakTime); breakColor.G = (Byte)((breakTime * breakColor.G + (maxBreakTime - breakTime) * baseColor.G) / maxBreakTime); breakColor.B = (Byte)((breakTime * breakColor.B + (maxBreakTime - breakTime) * baseColor.B) / maxBreakTime); breakColor.A = (Byte)((breakTime * breakColor.A + (maxBreakTime - breakTime) * baseColor.A) / maxBreakTime); List<Vertex> chunkList = new List<Vertex>(); Vector3 chunkOffset = (1f + (2f * breakTime) / maxBreakTime) * (up + right); chunkList.Add(new Vertex(position, up + right + chunkOffset)); chunkList.Add(new Vertex(position, up + left + chunkOffset)); chunkList.Add(new Vertex(position, down + left + chunkOffset)); chunkList.Add(new Vertex(position, down + right + chunkOffset)); currentRoom.BasicAddBlockSidesToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); currentRoom.AddBlockToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); chunkList = new List<Vertex>(); chunkOffset = (1f + (2f * breakTime) / maxBreakTime) * (up + left); chunkList.Add(new Vertex(position, up + right + chunkOffset)); chunkList.Add(new Vertex(position, up + left + chunkOffset)); chunkList.Add(new Vertex(position, down + left + chunkOffset)); chunkList.Add(new Vertex(position, down + right + chunkOffset)); currentRoom.BasicAddBlockSidesToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); currentRoom.AddBlockToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); chunkList = new List<Vertex>(); chunkOffset = (1f + (2f * breakTime) / maxBreakTime) * (down + right); chunkList.Add(new Vertex(position, up + right + chunkOffset)); chunkList.Add(new Vertex(position, up + left + chunkOffset)); chunkList.Add(new Vertex(position, down + left + chunkOffset)); chunkList.Add(new Vertex(position, down + right + chunkOffset)); currentRoom.BasicAddBlockSidesToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); currentRoom.AddBlockToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); chunkList = new List<Vertex>(); chunkOffset = (1f + (2f * breakTime) / maxBreakTime) * (down + left); chunkList.Add(new Vertex(position, up + right + chunkOffset)); chunkList.Add(new Vertex(position, up + left + chunkOffset)); chunkList.Add(new Vertex(position, down + left + chunkOffset)); chunkList.Add(new Vertex(position, down + right + chunkOffset)); currentRoom.BasicAddBlockSidesToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); currentRoom.AddBlockToTriangleList(chunkList, breakColor, depth, depth, Room.plateTexCoords, baseTriangleList); if (position.position != Vector3.Zero) { for (int i = 0; i < 36; i++) { dynamicBrickTriangleList.Add(new VertexPositionColorNormalTexture(Vector3.Zero, Color.White, Vector3.Zero, Vector2.Zero)); } } } else { currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicBrickTriangleList); currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicBrickTriangleList); baseTriangleList = new List<VertexPositionColorNormalTexture>(); ; } } else if (type == VL.DoodadType.PowerOrb && tracking == false && active == false) { for (int i = 0; i < 36; i++) { dynamicFancyTriangleList.Add(new VertexPositionColorNormalTexture(Vector3.Zero, Color.White, Vector3.Zero, Vector2.Zero)); } } else if (type != VL.DoodadType.Holoprojector && type != VL.DoodadType.HologramOldMan && type != VL.DoodadType.Beam && type != VL.DoodadType.PowerPlug && type != VL.DoodadType.Vortex) { if (active && type != VL.DoodadType.LaserSwitch) { currentRoom.BasicAddBlockSidesToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockToTriangleList(vList, activeColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); } else { currentRoom.BasicAddBlockSidesToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); currentRoom.AddBlockToTriangleList(vList, baseColor, depth, depth, Room.plateTexCoords, dynamicFancyTriangleList); } } if (type == VL.DoodadType.ItemBlock || isStation) { currentRoom.AddBlockFrontToTriangleList(vList, Color.White, depth + .01f, Room.plateTexCoords, decalList, true); } if (type == VL.DoodadType.HookTarget) { currentRoom.AddBlockFrontToTriangleList(vList, activeColor, depth, Room.plateTexCoords, decalList, true); } if (type == VL.DoodadType.PlugSlot) { currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth, Room.plateTexCoords, decalList, true); currentRoom.AddBlockFrontToTriangleList(vList, baseColor, -depth, Room.plateTexCoords, decalList, true); } if (type == VL.DoodadType.LaserSwitch) { if (active) { currentRoom.AddBlockFrontToTriangleList(vList, activeColor, depth, Room.plateTexCoords, decalList, true); currentRoom.AddBlockFrontToTriangleList(vList, activeColor, -depth, Room.plateTexCoords, decalList, true); } else { currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth, Room.plateTexCoords, decalList, true); currentRoom.AddBlockFrontToTriangleList(vList, baseColor, -depth, Room.plateTexCoords, decalList, true); } } if (type == VL.DoodadType.StationIcon) { currentRoom.AddBlockFrontToTriangleList(vList, iconColor, depth + .01f, Room.plateTexCoords, decalList, true); } if (type == VL.DoodadType.HologramOldMan) { if(hologramFade > 0) { Color hologram = Color.White; hologram.A = (Byte)(hologramFade * 255f / hologramMaxFade); hologram.B = (Byte)(hologramFade * 255f / hologramMaxFade); hologram.G = (Byte)(hologramFade * 255f / hologramMaxFade); hologram.R = (Byte)(hologramFade * 255f / hologramMaxFade); currentRoom.AddBlockFrontToTriangleList(vList, hologram, depth + .012f, Room.plateTexCoords, spriteList, true); } } if (type == VL.DoodadType.Beam) { currentRoom.AddBlockFrontToTriangleList(vList, Color.White, depth, beamTexCoords, beamList, true); } if (type == VL.DoodadType.PowerPlug) { if (active == true) { currentRoom.AddBlockFrontToTriangleList(vList, activeColor, depth, Room.plateTexCoords, decalList, true); currentRoom.AddBlockFrontToTriangleList(vList, activeColor, -depth, Room.plateTexCoords, decalList, true); } else { currentRoom.AddBlockFrontToTriangleList(vList, baseColor, depth, Room.plateTexCoords, decalList, true); //currentRoom.AddBlockFrontToTriangleList(vList, baseColor, -depth, Room.plateTexCoords, decalList, true); } } if(dynamicFancyTriangleList.Count > 0) { for (int i = 0; i < dynamicFancyTriangleList.Count; i++) { currentRoom.dynamicFancyPlateTriangleArray[cacheOffset + i] = dynamicFancyTriangleList[i]; } } if (dynamicBrickTriangleList.Count > 0) { for (int i = 0; i < dynamicBrickTriangleList.Count; i++) { currentRoom.dynamicBrickTriangleArray[cacheOffsetBrick + i] = dynamicBrickTriangleList[i]; } } baseTriangleArray = baseTriangleList.ToArray(); decalArray = decalList.ToArray(); spriteArray = spriteList.ToArray(); beamArray = beamList.ToArray(); } }