public GameCore(SaveData dataBuilder) { Map = dataBuilder.GetObject <AreaMap>(SaveKeyMap); PlayerPosition = dataBuilder.GetObject <Point>(SaveKeyPlayerPosition); Player = Map.GetCell(PlayerPosition).Objects.OfType <TPlayer>().Single(); Journal = new Journal(); CurrentTurn = dataBuilder.GetIntValue(SaveKeyCurrentTurn); cachedVisibleArea = null; }
public GameCore(IAreaMap map, TPlayer player, Point playerPosition) { Map = map; PlayerPosition = playerPosition; Player = player; Map.AddObject(PlayerPosition, Player); Journal = new Journal(); CurrentTurn = 1; cachedVisibleArea = null; }
public AreaMapFragment GetVisibleArea() { if (cachedVisibleArea != null) { return(cachedVisibleArea); } var visibleArea = VisibilityHelper.GetVisibleArea(Player.VisibilityRange, PlayerPosition); if (visibleArea == null) { return(null); } if (Player.VisibilityRange == Player.MaxVisibilityRange) { return(visibleArea); } var visibilityDifference = Player.MaxVisibilityRange - Player.VisibilityRange; var visibleAreaDiameter = Player.MaxVisibilityRange * 2 + 1; var result = new IAreaMapCell[visibleAreaDiameter][]; for (int y = 0; y < visibleAreaDiameter; y++) { result[y] = new IAreaMapCell[visibleAreaDiameter]; } for (int y = 0; y < visibleArea.Height; y++) { for (int x = 0; x < visibleArea.Width; x++) { var visibleAreaY = y + visibilityDifference; var visibleAreaX = x + visibilityDifference; result[visibleAreaY][visibleAreaX] = visibleArea.GetCell(x, y); } } cachedVisibleArea = new AreaMapFragment(result, visibleAreaDiameter, visibleAreaDiameter); return(cachedVisibleArea); }
private Point GetNearestTargetPosition(AreaMapFragment mapFragment) { for (int y = 0; y < mapFragment.Height; y++) { for (int x = 0; x < mapFragment.Width; x++) { var cell = mapFragment.GetCell(x, y); if (cell == null) { continue; } if (cell.Objects.Any(targetStrategy.IsTarget)) { return(new Point(x, y)); } } } return(null); }
public void PerformPlayerAction(IPlayerAction action) { log.Debug($"Performing player action: {action.GetType().Name}"); Map.PreUpdate(); var endsTurn = action.Perform(out var newPosition); PlayerPosition = newPosition; if (endsTurn) { ProcessSystemTurn(); if (GetIfPlayerIsFrozen()) { ProcessSystemTurn(); } TurnEnded?.Invoke(this, EventArgs.Empty); } cachedVisibleArea = null; }