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(); }
/// <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; } }
/// <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(); } }
/// <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(); } }
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(); }
public static void ReloadLevel() { Harness.GameCurrentLevel = (Level)Activator.CreateInstance(Harness.GameCurrentLevel.GetType()); Harness.RefreshOutput(); }
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(); } }
public static void ResetGame() { Harness.GameCurrentLevel = new Level01(); Harness.SaveGame(); Harness.RefreshOutput(); }