Ejemplo n.º 1
0
        public void DrawFrame(double time)
        {
            //remove objects from main list that need to be

            //add objects to main list that need to be
            if (ObjectsToAdd.Count > 0)
            {
                for (int i = 0; i < ObjectsToAdd.Count; i++)
                {
                    try
                    {
                        Objects.Add(ObjectsToAdd[i]);
                    }
                    catch
                    {
                        Console.WriteLine("Tried to add object to the list but failed");
                    }
                }
            }
            ObjectsToAdd.Clear();
            if (ObjectsToRemove.Count > 0)
            {
                for (int i = 0; i < ObjectsToRemove.Count; i++)
                {
                    try
                    {
                        Objects.Remove(ObjectsToRemove[i]);
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Tried to remove object from list but failed!");
                    }
                }
            }
            ObjectsToRemove.Clear();
            ConsoleColor[,] finalForeColors = new ConsoleColor[Program.ScreenX, Program.ScreenY];
            ConsoleColor[,] finalBackColors = new ConsoleColor[Program.ScreenX, Program.ScreenY];
            char[,] finalChars = new char[Program.ScreenX, Program.ScreenY];
            //sosorry
            for (int x = 0; x < Program.ScreenX; x++)
            {
                for (int y = 0; y < Program.ScreenY; y++)
                {
                    finalChars[x, y] = ' ';
                }
            }
            //Sort
            Objects.Sort((x, y) => x.z.CompareTo(y.z));
            for (int i = 0; i < Objects.Count; i++)
            {
                if (Objects[i].active)
                {
                    //I should already be going in order I think..

                    //f**k i need to make it work with singles
                    //blech

                    foreach (Coords coord in Objects[i].renderPositions)
                    {
                        if (coord.x < Program.ScreenX && coord.y < Program.ScreenY && coord.x > -1 && coord.y > -1)
                        {
                            finalForeColors[coord.x, coord.y] = coord.foreColor;
                            finalBackColors[coord.x, coord.y] = coord.backColor;
                            finalChars[coord.x, coord.y]      = coord.character;
                        }
                        else
                        {
                            //Console.WriteLine("Coord our of bounds!");
                        }
                    }
                }
            }

            if (filterActive)
            {
                DisplayData newData = screenFilter.RunFilt(finalForeColors, finalBackColors, finalChars);
                finalForeColors = newData.foreColors;
                finalBackColors = newData.backColors;
                finalChars      = newData.characters;
            }
            //not gonna try drawing this way anymore...

            /*
             * Console.SetCursorPosition(0, 0);
             * for (int y = 0; y < Program.ScreenY; y++)
             * {
             *  for (int x = 0; x < Program.ScreenX; x++)
             *  {
             *      //only draw changes
             *      if(currentBackColors[x, y] != finalBackColors[x,y] || currentForeColors[x,y] != finalForeColors[x,y] || currentFinalChars[x,y] != finalChars[x,y])
             *      {
             *          Console.SetCursorPosition(x, Program.ScreenY - y);
             *          Console.ForegroundColor = finalForeColors[x, y];
             *          Console.BackgroundColor = finalBackColors[x, y];
             *          Console.Write(finalChars[x, y]);
             *      }
             *
             *  }
             * }
             */
            //here we go oh boy.
            WindowManager.CHAR_INFO[] buffer = new WindowManager.CHAR_INFO[Program.ScreenX * Program.ScreenY];

            for (int y = 0; y < Program.ScreenY; y++)
            {
                for (int x = 0; x < Program.ScreenX; x++)
                {
                    ushort attributes = None;
                    switch (finalForeColors[x, Program.ScreenY - (y + 1)])
                    {
                    case ConsoleColor.Black:
                        attributes = None;
                        break;

                    case ConsoleColor.DarkBlue:
                        attributes = FOREGROUND_BLUE;
                        break;

                    case ConsoleColor.DarkGreen:
                        attributes = FOREGROUND_GREEN;
                        break;

                    case ConsoleColor.DarkCyan:
                        attributes = (ushort)(FOREGROUND_GREEN | FOREGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkRed:
                        attributes = FOREGROUND_RED;
                        break;

                    case ConsoleColor.DarkMagenta:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkYellow:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN);
                        break;

                    case ConsoleColor.Gray:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
                        break;

                    case ConsoleColor.DarkGray:
                        attributes = FOREGROUND_INTENSITY;
                        break;

                    case ConsoleColor.Blue:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Green:
                        attributes = (ushort)(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Cyan:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Red:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Magenta:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Yellow:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.White:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    default:
                        break;
                    }

                    ushort backattribute = None;
                    switch (finalBackColors[x, Program.ScreenY - (y + 1)])
                    {
                    case ConsoleColor.Black:
                        backattribute = None;
                        break;

                    case ConsoleColor.DarkBlue:
                        backattribute = BACKGROUND_BLUE;
                        break;

                    case ConsoleColor.DarkGreen:
                        backattribute = BACKGROUND_GREEN;
                        break;

                    case ConsoleColor.DarkCyan:
                        backattribute = (ushort)(BACKGROUND_GREEN | BACKGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkRed:
                        backattribute = BACKGROUND_RED;
                        break;

                    case ConsoleColor.DarkMagenta:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkYellow:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN);
                        break;

                    case ConsoleColor.Gray:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
                        break;

                    case ConsoleColor.DarkGray:
                        backattribute = BACKGROUND_INTENSITY;
                        break;

                    case ConsoleColor.Blue:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Green:
                        backattribute = (ushort)(BACKGROUND_GREEN | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Cyan:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Red:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Magenta:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Yellow:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.White:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    default:
                        break;
                    }

                    //im so sorry for these switch cases interop is not nice
                    attributes = (ushort)(backattribute | attributes);

                    buffer[y * Program.ScreenX + x] = new WindowManager.CHAR_INFO {
                        UnicodeChar = finalChars[x, Program.ScreenY - (y + 1)], Attributes = attributes
                    };
                }
            }
            //buffer[1 + 1] = new WindowManager.CHAR_INFO { UnicodeChar = 'h', Attributes = (ushort)(BACKGROUND_BLUE | FOREGROUND_GREEN ) };
            windowManager.RenderBuffer(buffer);
            //save changes
            currentBackColors = finalBackColors;
            currentForeColors = finalForeColors;
            currentFinalChars = finalChars;
        }
Ejemplo n.º 2
0
        public void DrawFrame(SlaveManager.SlaveData data)
        {
            //remove objects from main list that need to be

            //add objects to main list that need to be

            ConsoleColor[,] finalForeColors = new ConsoleColor[Program.ScreenX, Program.ScreenY];
            ConsoleColor[,] finalBackColors = new ConsoleColor[Program.ScreenX, Program.ScreenY];
            char[,] finalChars = new char[Program.ScreenX, Program.ScreenY];
            //sosorry


            //DisplayData newData = screenFilter.RunFilt(finalForeColors, finalBackColors, finalChars);
            finalForeColors = data.foreColors;
            finalBackColors = data.backColors;
            finalChars      = data.characters;

            //not gonna try drawing this way anymore...

            /*
             * Console.SetCursorPosition(0, 0);
             * for (int y = 0; y < Program.ScreenY; y++)
             * {
             *  for (int x = 0; x < Program.ScreenX; x++)
             *  {
             *      //only draw changes
             *      if(currentBackColors[x, y] != finalBackColors[x,y] || currentForeColors[x,y] != finalForeColors[x,y] || currentFinalChars[x,y] != finalChars[x,y])
             *      {
             *          Console.SetCursorPosition(x, Program.ScreenY - y);
             *          Console.ForegroundColor = finalForeColors[x, y];
             *          Console.BackgroundColor = finalBackColors[x, y];
             *          Console.Write(finalChars[x, y]);
             *      }
             *
             *  }
             * }
             */
            //here we go oh boy.
            WindowManager.CHAR_INFO[] buffer = new WindowManager.CHAR_INFO[Program.ScreenX * Program.ScreenY];

            for (int y = 0; y < Program.ScreenY; y++)
            {
                for (int x = 0; x < Program.ScreenX; x++)
                {
                    ushort attributes = None;
                    switch (finalForeColors[x, Program.ScreenY - (y + 1)])
                    {
                    case ConsoleColor.Black:
                        attributes = None;
                        break;

                    case ConsoleColor.DarkBlue:
                        attributes = FOREGROUND_BLUE;
                        break;

                    case ConsoleColor.DarkGreen:
                        attributes = FOREGROUND_GREEN;
                        break;

                    case ConsoleColor.DarkCyan:
                        attributes = (ushort)(FOREGROUND_GREEN | FOREGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkRed:
                        attributes = FOREGROUND_RED;
                        break;

                    case ConsoleColor.DarkMagenta:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkYellow:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN);
                        break;

                    case ConsoleColor.Gray:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
                        break;

                    case ConsoleColor.DarkGray:
                        attributes = FOREGROUND_INTENSITY;
                        break;

                    case ConsoleColor.Blue:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Green:
                        attributes = (ushort)(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Cyan:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Red:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Magenta:
                        attributes = (ushort)(FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Yellow:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                        break;

                    case ConsoleColor.White:
                        attributes = (ushort)(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        break;

                    default:
                        break;
                    }

                    ushort backattribute = None;
                    switch (finalBackColors[x, Program.ScreenY - (y + 1)])
                    {
                    case ConsoleColor.Black:
                        backattribute = None;
                        break;

                    case ConsoleColor.DarkBlue:
                        backattribute = BACKGROUND_BLUE;
                        break;

                    case ConsoleColor.DarkGreen:
                        backattribute = BACKGROUND_GREEN;
                        break;

                    case ConsoleColor.DarkCyan:
                        backattribute = (ushort)(BACKGROUND_GREEN | BACKGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkRed:
                        backattribute = BACKGROUND_RED;
                        break;

                    case ConsoleColor.DarkMagenta:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_BLUE);
                        break;

                    case ConsoleColor.DarkYellow:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN);
                        break;

                    case ConsoleColor.Gray:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
                        break;

                    case ConsoleColor.DarkGray:
                        backattribute = BACKGROUND_INTENSITY;
                        break;

                    case ConsoleColor.Blue:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Green:
                        backattribute = (ushort)(BACKGROUND_GREEN | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Cyan:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Red:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Magenta:
                        backattribute = (ushort)(BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.Yellow:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY);
                        break;

                    case ConsoleColor.White:
                        backattribute = (ushort)(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
                        break;

                    default:
                        break;
                    }

                    //im so sorry for these switch cases interop is not nice
                    attributes = (ushort)(backattribute | attributes);

                    buffer[y * Program.ScreenX + x] = new WindowManager.CHAR_INFO {
                        UnicodeChar = finalChars[x, Program.ScreenY - (y + 1)], Attributes = attributes
                    };
                }
            }
            //buffer[1 + 1] = new WindowManager.CHAR_INFO { UnicodeChar = 'h', Attributes = (ushort)(BACKGROUND_BLUE | FOREGROUND_GREEN ) };
            windowManager.RenderBuffer(buffer);
            //save changes
            currentBackColors = finalBackColors;
            currentForeColors = finalForeColors;
            currentFinalChars = finalChars;
        }