static bool HandleAdventureCursorKeys(KeyEventArgs e) { var ob = GameData.Data.FocusedObject; if (ob == null) { return(false); } var dir = KeyHelpers.KeyToDir(e.Key); if (dir == Direction.None) { return(false); } CommandPromptHandler.HandleDirection(dir); return(true); }
void OnKeyDown(KeyEventArgs e) { if (this.Location.HasValue == false) { return; } Key key = e.Key; if (KeyHelpers.KeyIsDir(key) == false) { return; } //m_control.ScrollStop(); var dir = KeyHelpers.KeyToDir(key); IntVector3 v; if ((e.KeyboardDevice.Modifiers & ModifierKeys.Control) != 0) { if (dir == Direction.North) { dir = Direction.Up; } else if (dir == Direction.South) { dir = Direction.Down; } else { return; } v = dir.ToIntVector3(); } else { var v2 = m_game.Camera.PlanarAdjust(dir.ToIntVector2()); v = new IntVector3(v2, 0); } int m = 1; if ((e.KeyboardDevice.Modifiers & ModifierKeys.Shift) != 0) { m = 5; } var pickMode = ((MapControl3D)m_control).Config.PickMode; var loc = this.Location.Value + v * m; switch (pickMode) { case MapControlPickMode.Underground: case MapControlPickMode.AboveGround: for (int z = m_game.ViewGridProvider.ViewGrid.Z2; z >= 0; --z) { var p = new IntVector3(loc.X, loc.Y, z); var td = m_game.Environment.GetTileData(p); if (!td.IsUndefined && !td.IsWall) { continue; } loc = p; break; } if (pickMode == MapControlPickMode.AboveGround) { if (loc.Z < m_game.ViewGridProvider.ViewGrid.Z2) { loc = loc.Up; } } break; case MapControlPickMode.Constant: break; default: throw new Exception(); } this.Location = loc; //m_control.KeepOnScreen(this.CursorPosition); e.Handled = true; }