示例#1
0
文件: Block.cs 项目: kevincos/Vexed
        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);
                        }
                    }
                }

            }
        }
示例#2
0
文件: Doodad.cs 项目: kevincos/Vexed
        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();

            }
        }