Exemplo n.º 1
0
        protected override void ProcessPlayerTurnEvents()
        {
            var player = (Mech)Player;

            player.ProcessTick();

            WallWalk = false;

            if (CheckMissionCompletion())
            {
                MessagePanel.Add("Mission Success");
                MessagePanel.Add("Press [[Enter]] to continue");
                Game.StateHandler.PushState(new MissionEndState(true));

                Game.Year++;
                Game.Scrap += NextMission.RewardScrap;
                if (Game.NextMission.RewardPart != null)
                {
                    Game.AvailParts.Add(Game.NextMission.RewardPart);
                }
                Difficulty++;

                NextMission = GenerateMission();
            }
        }
Exemplo n.º 2
0
 internal static void GameOver()
 {
     if (!_dead)
     {
         _dead = true;
         MessagePanel.Add("[color=err]System shutting down[/color]");
         MessagePanel.Add("Mission Failed. Press [[Enter]] to continue");
         Game.StateHandler.PushState(new MissionEndState(false));
     }
 }
Exemplo n.º 3
0
        internal static void SetupLevel(MissionInfo info)
        {
            AnimationHandler.Clear();
            EventScheduler.Clear();

            MessagePanel.Add($"Mission Start");

            BaseGame.MapHandler = new MapHandler(info.MapWidth, info.MapHeight, info.Difficulty);
            var mapgen = new CityMapgen(BaseGame.MapHandler, info);

            BaseGame.MapHandler = mapgen.Generate();
            MapHandler.PlaceActors(info, Game.Rand);
            MapHandler.Refresh();
        }
Exemplo n.º 4
0
        public Game() : base()
        {
            _mapLayer = new LayerInfo("Map", 1,
                                      EngineConsts.SIDEBAR_WIDTH + 2, 1,
                                      EngineConsts.MAPVIEW_WIDTH, EngineConsts.MAPVIEW_HEIGHT);

            _infoLayer = new LayerInfo("Info", 1,
                                       1, 1, EngineConsts.SIDEBAR_WIDTH, EngineConsts.SCREEN_HEIGHT);

            _radarLayer = new LayerInfo("Radar", 1,
                                        EngineConsts.SIDEBAR_WIDTH + EngineConsts.MAPVIEW_WIDTH + 3, 1,
                                        EngineConsts.SIDEBAR_R_WIDTH,
                                        EngineConsts.SCREEN_HEIGHT - EngineConsts.SIDEBAR_R_WIDTH - 1);

            _objectiveLayer = new LayerInfo("Objective", 1,
                                            EngineConsts.SIDEBAR_WIDTH + EngineConsts.MAPVIEW_WIDTH + 3,
                                            EngineConsts.SCREEN_HEIGHT - EngineConsts.SIDEBAR_R_WIDTH + 1,
                                            EngineConsts.SIDEBAR_R_WIDTH, EngineConsts.SIDEBAR_R_WIDTH);

            _messageLayer = new LayerInfo("Message", 1,
                                          EngineConsts.SIDEBAR_WIDTH + 2, EngineConsts.MAPVIEW_HEIGHT + 2,
                                          EngineConsts.MAPVIEW_WIDTH, EngineConsts.MESSAGE_HEIGHT);
            _mainLayer = new LayerInfo("Main", 11, 0, 0,
                                       EngineConsts.SCREEN_WIDTH + 2, EngineConsts.SCREEN_HEIGHT + 2);

            StateHandler = new StateHandler(MenuState.Instance, new Dictionary <Type, LayerInfo>
            {
                [typeof(MissionEndState)]        = _mapLayer,
                [typeof(NormalState)]            = _mapLayer,
                [typeof(TargettingState)]        = _mapLayer,
                [typeof(MenuState)]              = _mainLayer,
                [typeof(IntermissionFrameState)] = _mainLayer,
            });

            AnimationHandler = new AnimationHandler();
            MessagePanel     = new MessagePanel(EngineConsts.MESSAGE_HISTORY_COUNT);
            EventScheduler   = new EventScheduler(typeof(Player));

            // attach event handlers
            EventScheduler.Subscribe <MoveCommand>(c => ((MoveCommand)c).Execute());
            EventScheduler.Subscribe <TurnCommand>(c => ((TurnCommand)c).Execute());
            EventScheduler.Subscribe <AttackCommand>(c => ((AttackCommand)c).Execute());
            EventScheduler.Subscribe <AttackCommand>(c =>
            {
                var ac = (AttackCommand)c;
                ac.Animation.MatchSome(anim => AnimationHandler.Add(ac.Source.Id, anim));
            });
            EventScheduler.Subscribe <DelayAttackCommand>(c =>
            {
                var dc = (DelayAttackCommand)c;
                EventScheduler.AddEvent(new DelayAttack(dc.Delay, dc.Attack), dc.Delay);
            });

            EventScheduler.Subscribe <MechDeathEvent>(c =>
            {
                var mde   = (MechDeathEvent)c;
                Mech mech = mde.Source;
                MapHandler.RemoveActor(mech);

                if (MapHandler.Field[mech.Pos].IsVisible)
                {
                    MessagePanel.Add($"[color=info]Info[/color]: {mech.Name} destroyed");
                    MapHandler.Refresh();
                }
            });

            Reset();
            ConfigureTerminal();
        }