Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
        }