Exemplo n.º 1
0
 public static void LoadGame()
 {
     try
     {
         using (StreamReader inputFile = new StreamReader(FilePath.Get("save.dat")))
         {
             string lastLevel = Base64Decode(inputFile.ReadToEnd().TrimEnd());
             if (lastLevel.Equals("LogicGates.Models.Level00"))
             {
                 Harness.GameCurrentLevel = new Level01();
             }
             else
             {
                 Type type = Type.GetType(lastLevel, false);
                 if (type == null)
                 {
                     Harness.GameCurrentLevel = new Level99();
                 }
                 else
                 {
                     Harness.GameCurrentLevel = (Level)Activator.CreateInstance(type);
                 }
             }
         }
     }
     catch (FileNotFoundException)
     {
         Harness.GameCurrentLevel = new Level01();
         SaveGame();
     }
     Harness.RefreshOutput();
 }
Exemplo n.º 2
0
        /// <summary>
        /// Handler for mouse buttons clicks
        /// </summary>
        static void OnSDL_MOUSEBUTTONDOWN()
        {
            var clickedButton = SDL.SDL_GetMouseState(out MousePosition.Width, out MousePosition.Height);

            if (clickedButton == SDL.SDL_BUTTON(SDL.SDL_BUTTON_LEFT))
            {
                FindClickedAsset(MousePosition);
                ClickedAsset.ClickedLeft(MousePosition, RelativeMousePosition);

                if ((MouseState == Defs.Mouse.Idle))
                {
                    if (ClickedAsset is Element)
                    {
                        if ((ClickedAssetPin != null) && (!((Element)ClickedAsset).IsInTray()))
                        {
                            SelectedAssetPin = ClickedAssetPin;
                            MouseState       = Defs.Mouse.Select;
                        }
                        else if (ClickedAsset.IsMovable)
                        {
                            MouseState = Defs.Mouse.Move;
                        }
                    }
                }
                else if (MouseState == Defs.Mouse.Move)
                {
                    MouseState = Defs.Mouse.Idle;
                }
                else if (MouseState == Defs.Mouse.Select)
                {
                    if (ClickedAssetPin == null)
                    {
                        MouseState = Defs.Mouse.Idle;
                    }
                    else if ((SelectedAssetPin.Type != ClickedAssetPin.Type) && (SelectedAssetPin.Element != ClickedAssetPin.Element) && (!((Element)ClickedAsset).IsInTray()))
                    {
                        var connection = new Connection(SelectedAssetPin, ClickedAssetPin);
                        foreach (var item in connection.WiresList)
                        {
                            Harness.GameCurrentLevel.AsstesList.Add(item);
                        }
                        Harness.GameCurrentLevel.ConnectionsList.Add(connection);
                        Harness.RefreshOutput();
                        MouseState = Defs.Mouse.Idle;
                    }
                    else
                    {
                        ClickedAssetPin  = null;
                        SelectedAssetPin = null;
                        MouseState       = Defs.Mouse.Idle;
                    }
                }
            }
            else if (clickedButton == SDL.SDL_BUTTON(SDL.SDL_BUTTON_RIGHT))
            {
                FindClickedAsset(MousePosition);
                ClickedAsset.ClickedRight(MousePosition, RelativeMousePosition);
                MouseState = Defs.Mouse.Idle;
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Handler for mouse moving
 /// </summary>
 static void OnSDL_MOUSEMOTION()
 {
     if (MouseState == Defs.Mouse.Move)
     {
         SDL.SDL_GetMouseState(out MousePosition.Width, out MousePosition.Height);
         ClickedAsset.Position = MousePosition - RelativeMousePosition;
         Harness.RefreshOutput();
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Handler for ESC type
 /// </summary>
 static void OnSDL_ESCDOWN()
 {
     if (!(Harness.GameCurrentLevel is Level00))
     {
         Harness.GameCurrentLevel.AsstesList.Add(new Models.Images.Menu(new Size(Dimensions.Banner.Width, Dimensions.Banner.Height), new Position((Dimensions.Canvas.Width / 2) - (Dimensions.Banner.Width / 2), (Dimensions.Canvas.Height / 2) - (Dimensions.Banner.Height / 2))));
         Harness.RefreshOutput();
     }
     else
     {
         Harness.QuitGame();
     }
 }
Exemplo n.º 5
0
        public static void NextLevel()
        {
            string currentLevel       = Harness.GameCurrentLevel.ToString();
            string currentLevelNumber = currentLevel.Substring(currentLevel.Length - 2);
            int    currentLevelInt    = -1;
            string nextLevelNumber    = "";
            string nextLevel          = "";

            if (Int32.TryParse(currentLevelNumber, out currentLevelInt))
            {
                if (++currentLevelInt < 10)
                {
                    nextLevelNumber = "0" + currentLevelInt.ToString();
                }
                else
                {
                    nextLevelNumber = currentLevelInt.ToString();
                }
            }
            else
            {
                Harness.GameCurrentLevel = new Level00();
            }
            nextLevel = "LogicGates.Models.Level" + nextLevelNumber;

            Type type = Type.GetType(nextLevel, false);

            if (type == null)
            {
                Harness.GameCurrentLevel = new Level99();
            }
            else
            {
                Harness.GameCurrentLevel = (Level)Activator.CreateInstance(type);
                Harness.SaveGame();
            }
            Harness.RefreshOutput();
        }
Exemplo n.º 6
0
 public static void ReloadLevel()
 {
     Harness.GameCurrentLevel = (Level)Activator.CreateInstance(Harness.GameCurrentLevel.GetType());
     Harness.RefreshOutput();
 }
Exemplo n.º 7
0
        public static void SimulateLevel()
        {
            foreach (var element in GameCurrentLevel.ElementsList)
            {
                foreach (var pin in element.PinsList)
                {
                    if (pin.isConnected == false)
                    {
                        return;
                    }
                }

                foreach (var pin in element.PinsList)
                {
                    if ((pin.ParentConnection != null) && (pin.ParentConnection.State == Defs.Connection.HighImpedance) && !(pin.ParentConnection.isConnectedWithGateOutput()))
                    {
                        pin.ParentConnection.State = (Defs.Connection)element.CurrentTexture;
                        foreach (var wire in pin.ParentConnection.WiresList)
                        {
                            wire.CurrentTexture = (int)wire.Type + (2 * ((int)pin.ParentConnection.State + 1));
                            Engine.Harness.RefreshOutput();
                        }
                    }
                }
            }

            while (Harness.GameCurrentLevel.ConnectionsList.Find(x => (x.State == Defs.Connection.HighImpedance)) != null)
            {
                foreach (var gate in GameCurrentLevel.GatesList)
                {
                    if (!(gate.IsInTray()))
                    {
                        foreach (var pin in gate.PinsList)
                        {
                            if (pin.isConnected == false)
                            {
                                return;
                            }
                        }

                        gate.ComputeOutput();
                    }
                }
            }

            foreach (var lamp in Harness.GameCurrentLevel.LampsList)
            {
                int potential = 0;
                foreach (var pin in lamp.PinsList)
                {
                    potential += (int)pin.ParentConnection.State;
                }

                if (potential == 1)
                {
                    lamp.ChangeStateToHigh();
                }
            }

            bool isFinished = false;

            foreach (var lamp in Harness.GameCurrentLevel.LampsList)
            {
                if (lamp.CurrentTexture == 1)
                {
                    isFinished = true;
                }
                else
                {
                    isFinished = false;
                }
            }


            if (isFinished)
            {
                Harness.GameCurrentLevel.AsstesList.Add(new Models.Images.Completed(new Size(Dimensions.Banner.Width, Dimensions.Banner.Height), new Position((Dimensions.Canvas.Width / 2) - (Dimensions.Banner.Width / 2), (Dimensions.Canvas.Height / 2) - (Dimensions.Banner.Height / 2))));
                Harness.RefreshOutput();
            }
            else
            {
                Harness.GameCurrentLevel.AsstesList.Add(new Models.Images.Retry(new Size(Dimensions.Banner.Width, Dimensions.Banner.Height), new Position((Dimensions.Canvas.Width / 2) - (Dimensions.Banner.Width / 2), (Dimensions.Canvas.Height / 2) - (Dimensions.Banner.Height / 2))));
                Harness.RefreshOutput();
            }
        }
Exemplo n.º 8
0
 public static void ResetGame()
 {
     Harness.GameCurrentLevel = new Level01();
     Harness.SaveGame();
     Harness.RefreshOutput();
 }