private void PollMouse(uint elapsedTime) { MouseData mouse = new MouseData(TCODMouse.getStatus()); CheckMouseButtons(mouse); // check for mouse move //if (mouse.Position != lastMousePosition) //{ // DoMouseMove(mouse); // lastMousePosition = mouse.Position; // lastMouseMoveTime = totalElapsed; //} if ((mouse.PixelPosition != _lastMousePixelPosition)) { DoMouseMove(mouse); _lastMousePosition = mouse.Position; _lastMousePixelPosition = mouse.PixelPosition; _lastMouseMoveTime = elapsedTime; } // check for hover if (_isHovering == false) { StartHover(mouse); } }
private void CheckForMouseEvents() { var mouseData = TCODMouse.getStatus(); if (mouseData.CellVelocityX != 0 || mouseData.CellVelocityY != 0) { CurrentScene.MouseMoved(mouseData); } if (mouseData.WheelDown || mouseData.WheelUp) { CurrentScene.MouseWheel(mouseData); } if (mouseData.LeftButton != previousMouseData.LeftButton) { CurrentScene.MouseLeftButton(mouseData); } if (mouseData.MiddleButton != previousMouseData.MiddleButton) { CurrentScene.MouseMiddleButton(mouseData); } if (mouseData.RightButton != previousMouseData.RightButton) { CurrentScene.MouseRightButton(mouseData); } previousMouseData = mouseData; }
public void update(bool validate) { this.validate = validate; if (validate == true) { currentLevel.actorHandler.update(true); } mousedata = TCODMouse.getStatus(); key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed); debugCommands.update(); if (gameStatus == GameStatus.LOADING) { loadingGui.update(); } else if (gameStatus == GameStatus.DEFEAT) { if (key.Pressed) { Console.WriteLine("Restarting game..."); initialize(true); } } else if (gameStatus == GameStatus.MENU) { menuGui.focused = true; menuGui.update(); if (key.KeyCode == (TCODKeyCode.Escape)) { menuGui.focused = false; gameStatus = GameStatus.IDLE; } } else { gameStatus = GameStatus.IDLE; player.update(); gui.update(); messageGui.update(); if (gameStatus == GameStatus.NEW_TURN) { currentLevel.update(); //Message.flush(); } Message.update(); } lastKey = key; }
/// <summary> /// Starts the game simulation and set off the normal update life cycle /// </summary> /// <returns> A code corresponding to how the game exited: 0 = normal quit </returns> public int Run() { if (mainConsole == null || isRunning) { return(APPLICATION_EXIT_ERROR); } isRunning = true; internalTimer.Start(); // Main update loop while (!TCODConsole.isWindowClosed() && isRunning) { long current = internalTimer.ElapsedMilliseconds; long frameTime = current - previousUpdateTime; previousUpdateTime = current; frameLag += frameTime; // Actual update / console drawing runs on an inner catchup loop that is also interuptable // will run catchup frames or delay so that it closely matches desired FRAME_RATE, that // is also synced with the TCODConsoles own render frame rate while (frameLag >= MS_PER_UPDATE && !TCODConsole.isWindowClosed() && isRunning) { // TCOD must be flushed immedietly before polling the input channels TCODConsole.flush(); lastKey = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed); mouseData = TCODMouse.getStatus(); // Handle transitions between states if (gotoNewState) { EnteredNewState(nextState); gotoNewState = false; } Update(); Render(); // always allow for core update interrupt if (lastKey.KeyCode == TCODKeyCode.F4) { isRunning = false; } } } internalTimer.Stop(); return(APPLICATION_EXIT_NORMAL); }
public void Initialize(BaseScene initialScene = null) { Logger.Initialize(); windowTitle = "Emergence"; Settings = LoadSettings("Assets/config.json"); if (Settings == null) { throw new Exception("Error loading config file."); } TCODConsole.setCustomFont($"Assets/Fonts/{Settings.Font}", (int)TCODFontFlags.LayoutAsciiInRow); TCODSystem.setFps(Settings.Fps); TCODConsole.initRoot(Settings.ScreenWidth, Settings.ScreenHeight, windowTitle, false, Settings.GetRendererType()); previousMouseData = TCODMouse.getStatus(); CurrentScene = initialScene; }
public bool pickATile(out int x, out int y, float maxRange) { int pickX = Program.engine.player.x - map.offsetX, pickY = Program.engine.player.y - map.offsetY; for (int cx = map.renderX; cx < map.renderWidth; cx++) { for (int cy = map.renderY; cy < map.renderHeight; cy++) { if (Program.engine.player.fov.isInFov(cx + map.offsetX, cy + map.offsetY) && (maxRange == 0 || Program.engine.player.getDistance(cx + map.offsetX, cy + map.offsetY) <= maxRange)) { TCODColor col = TCODConsole.root.getCharBackground(cx, cy); col = col.Multiply(1.2f); TCODConsole.root.setCharBackground(cx, cy, col); } } } int oldX = pickX, oldY = pickY; TCODColor oldC = TCODConsole.root.getCharBackground(pickX, pickY); while (!TCODConsole.isWindowClosed()) { render(); mousedata = TCODMouse.getStatus(); Program.engine.key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed); if (Engine.useMouse) { if (Program.engine.player.fov.isInFov(mousedata.CellX + map.offsetX, mousedata.CellY + map.offsetY)) { if ((maxRange == 0 || Program.engine.player.getDistance(mousedata.CellX + map.offsetX, mousedata.CellY + map.offsetY) <= maxRange)) { pickX = mousedata.CellX; pickY = mousedata.CellY; if (mousedata.LeftButtonPressed) { x = mousedata.CellX + map.offsetX; y = mousedata.CellY + map.offsetY; return(true); } } } if (mousedata.RightButtonPressed) { x = 0; y = 0; return(false); } } if (pickX != oldX || pickY != oldY) { TCODConsole.root.setCharBackground(oldX, oldY, oldC); oldC = TCODConsole.root.getCharBackground(pickX, pickY); TCODConsole.root.setCharBackground(pickX, pickY, TCODColor.white); oldX = pickX; oldY = pickY; } if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY + map.offsetY)) { if ((maxRange == 0 || Program.engine.player.getDistance(pickX + map.offsetX, pickY + map.offsetY) <= maxRange)) { switch (Program.engine.key.KeyCode) { case TCODKeyCode.Enter: { x = pickX + map.offsetX; y = pickY + map.offsetY; return(true); } case TCODKeyCode.Up: { if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY - 1 + map.offsetY)) { if (Program.engine.player.getDistance(pickX + map.offsetX, pickY - 1 + map.offsetY) <= maxRange) { pickY--; } } break; } case TCODKeyCode.Down: if (Program.engine.player.fov.isInFov(pickX + map.offsetX, pickY + 1 + map.offsetY)) { if (Program.engine.player.getDistance(pickX + map.offsetX, pickY + 1 + map.offsetY) <= maxRange) { pickY++; } } break; case TCODKeyCode.Left: if (Program.engine.player.fov.isInFov(pickX - 1 + map.offsetX, pickY + map.offsetY)) { if (Program.engine.player.getDistance(pickX - 1 + map.offsetX, pickY + map.offsetY) <= maxRange) { pickX--; } } break; case TCODKeyCode.Right: if (Program.engine.player.fov.isInFov(pickX + 1 + map.offsetX, pickY + map.offsetY)) { if (Program.engine.player.getDistance(pickX + 1 + map.offsetX, pickY + map.offsetY) <= maxRange) { pickX++; } } break; } } } TCODConsole.flush(); Program.engine.lastKey = Program.engine.key; } x = 0; y = 0; return(false); }
private bool getInputPos(out Point p) { string ps = ""; p = new Point(); int oldX = 0, oldY = 0; TCODColor oldC = TCODConsole.root.getCharBackground(0, 0); while (true && !TCODConsole.isWindowClosed()) { engine.mousedata = TCODMouse.getStatus(); engine.key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed); engine.render(false); TCODConsole.root.setCharBackground(engine.mousedata.CellX, engine.mousedata.CellY, TCODColor.white); if (engine.mousedata.CellX != oldX || engine.mousedata.CellY != oldY) { TCODConsole.root.setCharBackground(oldX, oldY, oldC); oldC = TCODConsole.root.getCharBackground(engine.mousedata.CellX, engine.mousedata.CellY); oldX = engine.mousedata.CellX; oldY = engine.mousedata.CellY; } TCODConsole.flush(); if (Engine.Engine.useMouse) { p.X = engine.mousedata.CellX; p.Y = engine.mousedata.CellY; if (engine.mousedata.LeftButtonPressed) { p.X = engine.mousedata.CellX + engine.map.offsetX; p.Y = engine.mousedata.CellY + engine.map.offsetY; return(true); } } if (engine.key.KeyCode == TCODKeyCode.Enter) { break; } if (char.IsLetterOrDigit(engine.key.Character) || engine.key.Character == ',') { Message.Write(engine.key.Character.ToString()); ps += engine.key.Character; } if (engine.key.KeyCode == TCODKeyCode.Backspace) { if (ps.Length > 0) { ps.Remove(ps.Length - 1); Message.unwriteLastChar(); } } } if (ps == "here") { p.X = engine.player.x; p.Y = engine.player.y; return(true); } try { string[] coords = ps.Split(','); p = new Point(int.Parse(coords[0]), int.Parse(coords[1])); return(true); } catch (Exception e) { Console.WriteLine(e.Message); Message.WriteLine("Incorrect position"); return(false); } }