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(); } }
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)); } }
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(); }
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(); }