Пример #1
0
        public UnitConfigurationSelectionOption(
            string ClassName,
            string DetailsClassName,
            string OverlayClassName,
            UnitConfigurationLink UnitConfigurationLink,
            Faction Faction,
            UnitConfigurationRenderer Renderer,
            bool DisplayCount)
            : base(ClassName)
        {
            this.UnitConfigurationLink = UnitConfigurationLink;

            StackView = new UnitConfigurationStackView(
                UnitConfigurationLink.UnitConfiguration,
                Faction,
                Renderer,
                Class.GetAttributeWithDefault("unit-scale", 0),
                OverlayClassName,
                DisplayCount);
            StackView.Position = .5f * StackView.Size + new Vector2f(12, 12);
            StackView.Parent   = this;
            Value = StackView;

            _PointText                 = new Button(DetailsClassName);
            _PointText.Position        = new Vector2f(12, StackView.Size.Y + 16);
            _PointText.Parent          = this;
            _PointText.DisplayedString =
                UnitConfigurationLink.UnitConfiguration.GetPointValue(Faction.HalfPriceTrucks).ToString();
        }
Пример #2
0
        public void SetScenario(
            Scenario Scenario, UnitConfigurationRenderer UnitRenderer, FactionRenderer FactionRenderer)
        {
            _ScenarioDisplay.Clear();
            foreach (ArmyConfiguration army in Scenario.ArmyConfigurations)
            {
                _ScenarioDisplay.Add(
                    new Button("scenario-army-header")
                {
                    DisplayedString = ObjectDescriber.Describe(army.Faction)
                });
                var      factionMount = new GuiContainer <GuiItem>("scenario-faction-mount");
                Vector2f size         = factionMount.Size - factionMount.LeftPadding * 2;
                var      faction      = new FactionView(army.Faction, FactionRenderer, Math.Min(size.X, size.Y));
                faction.Position = .5f * (factionMount.Size - faction.Size) - factionMount.LeftPadding;
                factionMount.Add(faction);
                _ScenarioDisplay.Add(factionMount);
                foreach (DeploymentConfiguration deployment in army.DeploymentConfigurations)
                {
                    _ScenarioDisplay.Add(new DeploymentRow(deployment, army.Faction, UnitRenderer));
                }
                foreach (ObjectiveSuccessTrigger trigger in army.VictoryCondition.Triggers)
                {
                    _ScenarioDisplay.Add(new VictoryConditionRow(trigger));
                }
            }

            _DetailDisplay.Clear();
            AddDetail("Environment", ObjectDescriber.Describe(Scenario.Environment));
            AddDetail("Turns", Scenario.TurnConfiguration.Turns.ToString());
            AddSequence("Deploy Order", Scenario.TurnConfiguration.DeploymentOrder, Scenario.ArmyConfigurations.ToArray());
            AddSequence("Turn Order", Scenario.TurnConfiguration.TurnOrder, Scenario.ArmyConfigurations.ToArray());
            AddDetail("Strength", Scenario.ArmyConfigurations.Select(i => DescribeStrength(i)).ToArray());
        }
Пример #3
0
        public override Pod SetupState(ProgramContext ProgramContext, ProgramStateContext ProgramStateContext)
        {
            _Context = ProgramStateContext;
            var context = (ScenarioBuilderContext)_Context;

            var builder  = context.ScenarioBuilder.Armies.First(i => !i.Validate());
            var renderer =
                new UnitConfigurationRenderer(
                    GameData.UnitConfigurationLinks.Values
                    .Where(builder.Parameters.Matches)
                    .Select(i => i.UnitConfiguration),
                    GameData.UnitRenderDetails,
                    128,
                    1024,
                    ClassLibrary.Instance.GetFont("compacta"));
            var screen =
                new ArmyBuilderScreen(
                    ProgramContext.ScreenResolution,
                    GameData.UnitConfigurationLinks.Values,
                    builder.Parameters,
                    renderer);

            screen.OnMainMenuButtonClicked += HandleBack;

            _Controller             = new ArmyBuilderController(builder, screen, renderer);
            _Controller.OnFinished += HandleFinished;

            return(screen);
        }
 public override DeploymentPage MakePage(DeploymentPane Pane, UnitConfigurationRenderer Renderer)
 {
     _DeploymentPage = new ConvoyDeploymentPage(_Deployment, Renderer, Pane);
     _DeploymentPage.OnLoadAction   += HandleLoad;
     _DeploymentPage.OnUnloadAction += HandleUnload;
     return(_DeploymentPage);
 }
 public ArmyBuilderController(
     ArmyBuilder ArmyBuilder, ArmyBuilderScreen Screen, UnitConfigurationRenderer Renderer)
 {
     _ArmyBuilder        = ArmyBuilder;
     _Screen             = Screen;
     _Screen.OnFinished += HandleFinished;
     _Screen.OnUnitConfigurationRightClicked += HandleUnitConfigurationRightClicked;
     _Renderer = Renderer;
 }
        public SingularUnitSelectionOption(string ClassName, Unit Unit, UnitConfigurationRenderer Renderer)
            : base(ClassName)
        {
            this.Unit = Unit;

            _StackView.Add(new UnitView(Unit, Renderer, UNIT_VIEW_SCALE, false));
            _StackView.Position = Size / 2;
            _StackView.Parent   = this;
            Value = _StackView;
        }
        public GroupedUnitSelectionOption(
            string ClassName, string OverlayClassName, IEnumerable <Unit> Units, UnitConfigurationRenderer Renderer)
            : base(ClassName)
        {
            UnitConfiguration = Units.First().Configuration;

            _StackView = new HomogenousStackView(
                Units, Renderer, Class.GetAttributeWithDefault("unit-scale", 0), OverlayClassName);
            _StackView.Position = Size / 2;
            _StackView.Parent   = this;
            Value = _StackView;
        }
Пример #8
0
        public MatchScreen(
            Vector2f WindowSize,
            Match Match,
            IEnumerable <Army> FollowedArmies,
            TileRenderer TileRenderer,
            UnitConfigurationRenderer UnitRenderer,
            FactionRenderer FactionRenderer)
            : base(WindowSize, Match.Map, TileRenderer)
        {
            Match.OnStartPhase   += _EventBuffer.Hook <StartTurnComponentEventArgs>(HandleNewTurn).Invoke;
            Match.OnExecuteOrder += _EventBuffer.Hook <ExecuteOrderEventArgs>(HandleOrderExecuted).Invoke;

            this.UnitRenderer    = UnitRenderer;
            this.FactionRenderer = FactionRenderer;

            _FollowedArmies  = new HashSet <Army>(FollowedArmies);
            _FogOfWar        = Match.Scenario.Rules.FogOfWar;
            _FogOfWarHandler = _EventBuffer.Hook <SightUpdatedEventArgs>(HandleSightUpdated);

            EventHandler <NewUnitEventArgs> addUnitHandler = _EventBuffer.Hook <NewUnitEventArgs>(AddUnit).Invoke;

            foreach (Army a in Match.Armies)
            {
                a.OnUnitAdded += addUnitHandler;
                foreach (Unit u in a.Units)
                {
                    AddUnit(u);
                }
            }

            for (int i = 0; i < Match.Scenario.TurnConfiguration.Turns; ++i)
            {
                _TurnCounter.Add(new Checkbox("overlay-turn-counter-box")
                {
                    Enabled = false
                });
            }

            _FinishButton.Position            = Size - _FinishButton.Size - new Vector2f(32, 32);
            _FinishButton.OnClick            += HandleFinishClicked;
            _InfoDisplay.Position             = _FinishButton.Position - new Vector2f(0, _InfoDisplay.Size.Y + 16);
            _VictoryConditionDisplay.Position =
                _InfoDisplay.Position - new Vector2f(0, _VictoryConditionDisplay.Size.Y + 16);
            _ActionDisplay.Position = new Vector2f(WindowSize.X - _ActionDisplay.Size.X - 16, 16);

            _TransformedItems.Add(_StackLayer);

            _Items.Add(_FinishButton);
            _Items.Add(_InfoDisplay);
            _Items.Add(_VictoryConditionDisplay);
            _Items.Add(_TurnCounter);
            _Items.Add(_ActionDisplay);
        }
Пример #9
0
 public DeploymentRow(DeploymentConfiguration Deployment, Faction Faction, UnitConfigurationRenderer Renderer)
     : base("scenario-deployment-row")
 {
     Add(new Button("scenario-deployment-header")
     {
         DisplayedString = Deployment.UnitGroup.Name
     });
     Add(new Button("scenario-deployment")
     {
         DisplayedString = DeploymentDescriber.Describe(Deployment)
     });
     Add(new UnitGroupView(Deployment.UnitGroup, Faction, Renderer));
 }
Пример #10
0
        public UnitView(Unit Unit, UnitConfigurationRenderer Renderer, float Scale, bool Reactive)
        {
            this.Unit     = Unit;
            this.Reactive = Reactive;

            _Renderer = Renderer;
            _UnitConfigurationView = new UnitConfigurationView(
                Unit.Configuration, Unit.Army.Configuration.Faction, Renderer, Scale);
            Unit.OnConfigurationChange +=
                _UnitConfigurationChangedBuffer.Hook <EventArgs>(UpdateConfigurationView).Invoke;

            Vector2f tl = new Vector2f(-.5f, -.15f) * Scale;
            Vector2f tr = new Vector2f(.5f, -.15f) * Scale;
            Vector2f br = new Vector2f(.5f, .15f) * Scale;
            Vector2f bl = new Vector2f(-.5f, .15f) * Scale;

            if (MOVED_DISPLAY == null)
            {
                MOVED_DISPLAY = new Button("overlay-moved-box")
                {
                    DisplayedString = "MOVED"
                };
                MOVED_DISPLAY.Position = -.5f * new Vector2f(64, MOVED_DISPLAY.Size.Y);
            }
            if (FIRED_DISPLAY == null)
            {
                FIRED_DISPLAY = new Button("overlay-fired-box")
                {
                    DisplayedString = "FIRED"
                };
                FIRED_DISPLAY.Position = -.5f * new Vector2f(64, FIRED_DISPLAY.Size.Y);
            }
            if (MOVING_DISPLAY == null)
            {
                MOVING_DISPLAY = new Button("overlay-moving-box")
                {
                    DisplayedString = "MOVING"
                };
                MOVING_DISPLAY.Position = -.5f * new Vector2f(64, MOVING_DISPLAY.Size.Y);
            }
            if (WORKING_DISPLAY == null)
            {
                WORKING_DISPLAY = new Button("overlay-working-box")
                {
                    DisplayedString = "WORKING"
                };
                WORKING_DISPLAY.Position = -.5f * new Vector2f(64, WORKING_DISPLAY.Size.Y);
            }
        }
        public HomogenousStackView(
            IEnumerable <Unit> Units, UnitConfigurationRenderer Renderer, int UnitScale, string OverlayClassName)
        {
            _Text          = new Button(OverlayClassName);
            _Text.Position = -.5f * new Vector2f(UnitScale, _Text.Size.Y);
            _Text.Parent   = this;

            _UnitScale = UnitScale;
            _Renderer  = Renderer;
            _UnitViews = new Stack <UnitView>(Units.Select(i => new UnitView(i, Renderer, _UnitScale, false)));
            foreach (UnitView u in _UnitViews)
            {
                u.Parent = this;
            }
        }
 public UnitConfigurationTable(
     string ClassName,
     string RowClassName,
     string CellClassName,
     Faction Faction,
     UnitConfigurationRenderer Renderer,
     bool StackDuplicates)
     : base(ClassName)
 {
     _Renderer        = Renderer;
     _Faction         = Faction;
     _RowClassName    = RowClassName;
     _CellClassName   = CellClassName;
     _ItemWidth       = _Class.GetAttributeWithDefault("item-width", 1);
     _StackDuplicates = StackDuplicates;
 }
Пример #13
0
        public UnitInfoPane(Unit Unit, UnitConfigurationRenderer Renderer)
            : base(Unit.Configuration, Unit.Army.Configuration.Faction, Renderer)
        {
            _Info.Add(new Button("unit-info-header")
            {
                DisplayedString = ObjectDescriber.Describe(Unit)
            });

            AddBasicAttributes();
            AddComposition();
            AddCombatCapabilities();
            AddSightCapabilities();
            AddTransportCapabilities();
            AddMovementAttributes();
            AddMountedInfantryAttributes();
        }
 public UnitConfigurationStackView(
     UnitConfiguration UnitConfiguration,
     Faction Faction,
     UnitConfigurationRenderer Renderer,
     int UnitScale,
     string OverlayClassName,
     bool DisplayCount)
 {
     _DisplayCount          = DisplayCount;
     _UnitConfigurationView = new UnitConfigurationView(UnitConfiguration, Faction, Renderer, UnitScale);
     if (_DisplayCount)
     {
         _Text          = new Button(OverlayClassName);
         _Text.Position = -.5f * new Vector2f(UnitScale, _Text.Size.Y);
         _Text.Parent   = this;
     }
 }
Пример #15
0
        protected UnitInfoPaneBase(
            UnitConfiguration UnitConfiguration, Faction Faction, UnitConfigurationRenderer Renderer)
            : base("unit-info-pane")
        {
            _UnitConfiguration = UnitConfiguration;
            _Faction           = Faction;

            _CloseButton.Position = new Vector2f(Size.X - _CloseButton.Size.X - LeftPadding.X * 2, 0);
            _CloseButton.OnClick += HandleClose;

            _UnitConfigurationView          = new UnitConfigurationView(UnitConfiguration, Faction, Renderer, 192);
            _UnitConfigurationView.Position = new Vector2f(144, 96);

            Add(_CloseButton);
            Add(_UnitConfigurationView);
            Add(_Info);
        }
Пример #16
0
        public ConvoyDeploymentPage(
            ConvoyDeployment Deployment, UnitConfigurationRenderer Renderer, DeploymentPane Pane)
        {
            _Deployment = Deployment;
            _Renderer   = Renderer;

            _MoveUpButton.OnClick   += HandleMoveUp;
            _MoveDownButton.OnClick += HandleMoveDown;
            _LoadButton.OnClick     += HandleLoadButton;
            _UnloadButton.OnClick   += HandleUnloadButton;

            _Selection = new ValuedScrollCollection <SingularUnitSelectionOption, StackView>("deployment-select");

            var units = Deployment.Units.ToList();

            units.Sort(new FluentComparator <Unit>(i => i.Configuration.IsVehicle)
                       .ThenCompare(i => i.Configuration.IsArmored)
                       .ThenCompare(i => i.Configuration.UnitClass != UnitClass.TRANSPORT)
                       .ThenCompare(i => i.Configuration.Movement)
                       .Invert());
            foreach (Unit u in units)
            {
                u.OnLoad   += HandleLoad;
                u.OnUnload += HandleUnload;

                var option = new SingularUnitSelectionOption("deployment-selection-option", u, _Renderer);
                _Selection.Add(option);
            }

            _Selection.Position      = new Vector2f(0, 48);
            _LoadButton.Position     = new Vector2f(0, Pane.Size.Y - _LoadButton.Size.Y - 32);
            _UnloadButton.Position   = new Vector2f(_LoadButton.Size.X + 8, Pane.Size.Y - _UnloadButton.Size.Y - 32);
            _MoveUpButton.Position   = new Vector2f(0, Pane.Size.Y - _LoadButton.Size.Y - _MoveUpButton.Size.Y - 36);
            _MoveDownButton.Position = new Vector2f(
                _MoveUpButton.Size.X + 8, Pane.Size.Y - _UnloadButton.Size.Y - _MoveDownButton.Size.Y - 36);

            Add(_Selection);
            Add(_LoadButton);
            Add(_UnloadButton);
            Add(_MoveUpButton);
            Add(_MoveDownButton);
        }
        public override Pod SetupState(ProgramContext ProgramContext, ProgramStateContext ProgramStateContext)
        {
            _Context        = (MatchContext)ProgramStateContext;
            _MatchEndBuffer = new EventBuffer <EventArgs>();

            var renderer = new UnitConfigurationRenderer(
                _Context.Match.Scenario,
                GameData.UnitRenderDetails,
                128,
                1024,
                ClassLibrary.Instance.GetFont("compacta"));
            var factionRenderer =
                new FactionRenderer(_Context.Match.Scenario, GameData.FactionRenderDetails, 512, 1024);
            var armies = new HashSet <Army>(_Context.GetPlayerControlledArmies());

            var screen = new MatchScreen(
                ProgramContext.ScreenResolution,
                _Context.Match,
                armies,
                GameData.TileRenderers[_Context.Match.Scenario.Environment.UniqueKey],
                renderer,
                factionRenderer);
            var controller =
                new HumanMatchPlayerController(
                    _Context.MakeMatchAdapter(), armies, renderer, screen, ProgramContext.KeyController);

            var playerControllers = new Dictionary <Army, MatchPlayerController>();

            foreach (Army a in _Context.Match.Armies)
            {
                // var controller = new AIMatchPlayerController(_Context.MakeMatchAdapter(), a);
                var overrideController = _Context.GetOverridePlayerController(a);
                playerControllers.Add(a, overrideController ?? controller);
            }
            _MatchController             = new MatchController(_Context.Match, playerControllers);
            screen.OnPulse              += HandlePulse;
            _Context.Match.OnMatchEnded += _MatchEndBuffer.Hook <EventArgs>(HandleMatchEnd).Invoke;
            _Context.Match.Start();

            return(screen);
        }
        public ScenarioSelectScreen(Vector2f WindowSize, IEnumerable <Scenario> Scenarios)
            : base(WindowSize)
        {
            _Renderer =
                new UnitConfigurationRenderer(
                    Scenarios.SelectMany(i => i.UnitConfigurations).Distinct(),
                    GameData.UnitRenderDetails,
                    128,
                    1024,
                    ClassLibrary.Instance.GetFont("compacta"));
            _FactionRenderer =
                new FactionRenderer(
                    Scenarios.SelectMany(i => i.ArmyConfigurations.Select(j => j.Faction)).Distinct(),
                    GameData.FactionRenderDetails,
                    512,
                    1024);
            foreach (Scenario s in Scenarios)
            {
                var option = new SelectionOption <Scenario>("scenario-selection-option")
                {
                    DisplayedString = s.Name,
                    Value           = s
                };
                _ScenarioSelect.Add(option);
            }
            _ScenarioSelect.OnChange += HandleSelect;
            _ScenarioView.Position    = new Vector2f(_ScenarioSelect.Size.X + 16, 0);

            _StartButton.OnClick += HandleStart;
            _StartButton.Position = new Vector2f(0, _Display.Size.Y - _StartButton.Size.Y - 32);

            _Display.Position = .5f * (WindowSize - _Display.Size);

            _Display.Add(_ScenarioSelect);
            _Display.Add(_ScenarioView);
            _Display.Add(_StartButton);
            _Items.Add(_Display);
        }
Пример #19
0
        public UnitGroupView(UnitGroup UnitGroup, Faction Faction, UnitConfigurationRenderer Renderer)
            : base("scenario-deployment-units")
        {
            var offset = Math.Min(68, (Size.X - LeftPadding.X * 2 - 64) / (UnitGroup.UnitCounts.Count() - 1));
            int i      = 0;

            foreach (UnitCount count in UnitGroup.UnitCounts)
            {
                Add(
                    new UnitConfigurationStackView(
                        count.UnitConfiguration,
                        Faction,
                        Renderer,
                        64,
                        "scenario-deployment-units-overlay",
                        true)
                {
                    Count    = count.Count,
                    Position = new Vector2f(offset * i + 32, 32)
                });
                ++i;
            }
        }
        public PositionalDeploymentPage(PositionalDeployment Deployment, UnitConfigurationRenderer Renderer)
        {
            _Deployment = Deployment;
            _Renderer   = Renderer;

            _Selection =
                new ValuedScrollCollection <GroupedUnitSelectionOption, HomogenousStackView>("deployment-select");
            _Selection.OnChange +=
                (sender, e) => { if (OnSelectedStack != null)
                                 {
                                     OnSelectedStack(this, EventArgs.Empty);
                                 }
            };

            foreach (var g in Deployment.Units.Where(i => i.Position == null).GroupBy(i => i.Configuration))
            {
                _Selection.Add(
                    new GroupedUnitSelectionOption(
                        "deployment-selection-option", "deployment-selection-option-overlay", g, _Renderer));
            }

            _Selection.Position = new Vector2f(0, 48);
            Add(_Selection);
        }
Пример #21
0
        public UnitConfigurationView(
            UnitConfiguration UnitConfiguration, Faction Faction, UnitConfigurationRenderer Renderer, float Scale)
        {
            this.Scale = Scale;
            Color[] colors = UnitConfiguration.UnitClass == UnitClass.BLOCK ||
                             UnitConfiguration.UnitClass == UnitClass.MINEFIELD
                                                                                          ? new Color[] { Color.White } : Faction.Colors;
            if (!UnitConfiguration.IsVehicle)
            {
                colors = colors.ToArray();
                for (int i = 0; i < colors.Length; ++i)
                {
                    var f = new FloatingColor(colors[i]);
                    f         = f.MakeHSL();
                    f.B       = Math.Min(1, f.B + .1f);
                    colors[i] = f.MakeRGB().ConvertToColor();
                }
            }

            _Vertices = new Vertex[colors.Length * 4];
            float barHeight            = 1f / colors.Length;
            var   backgroundRenderInfo = Renderer.GetRenderInfo(null);

            _BackgroundTexture = backgroundRenderInfo.Item1;
            var v = backgroundRenderInfo.Item2;

            for (int i = 0; i < colors.Length; ++i)
            {
                float yT = v[0].Y + ((float)i / colors.Length) * (v[0].Y + v[2].Y);
                float yB = v[0].Y + ((float)(i + 1) / colors.Length) * (v[0].Y + v[2].Y);
                _Vertices[i * 4] =
                    new Vertex(new Vector2f(-.5f, i * barHeight - .5f), colors[i], new Vector2f(v[0].X, yT));
                _Vertices[i * 4 + 1] =
                    new Vertex(new Vector2f(.5f, i * barHeight - .5f), colors[i], new Vector2f(v[2].X, yT));
                _Vertices[i * 4 + 2] =
                    new Vertex(new Vector2f(.5f, (i + 1) * barHeight - .5f), colors[i], new Vector2f(v[2].X, yB));
                _Vertices[i * 4 + 3] =
                    new Vertex(new Vector2f(-.5f, (i + 1) * barHeight - .5f), colors[i], new Vector2f(v[0].X, yB));
            }

            var renderInfo = Renderer.GetRenderInfo(UnitConfiguration);

            _Texture       = renderInfo.Item1;
            _ImageVertices = new Vertex[4];
            Color c = Renderer.RenderDetails[UnitConfiguration.UniqueKey].OverrideColor;

            if (c.R == 0 && c.G == 0 && c.B == 0)
            {
                c = colors.ArgMax(i => new FloatingColor(i).Luminosity());
            }

            var tl = new Vector2f(-.5f, -.5f);
            var tr = new Vector2f(.5f, -.5f);
            var br = new Vector2f(.5f, .5f);
            var bl = new Vector2f(-.5f, .5f);

            _ImageVertices[0] = new Vertex(tl, c, renderInfo.Item2[0]);
            _ImageVertices[1] = new Vertex(tr, c, renderInfo.Item2[1]);
            _ImageVertices[2] = new Vertex(br, c, renderInfo.Item2[2]);
            _ImageVertices[3] = new Vertex(bl, c, renderInfo.Item2[3]);

            _Bounds = new Rectangle(new Vector2f(-.5f, -.5f) * Scale, new Vector2f(1, 1) * Scale);
        }
Пример #22
0
        public ArmyBuilderScreen(
            Vector2f WindowSize,
            IEnumerable <UnitConfigurationLink> UnitConfigurations,
            ArmyParameters Parameters,
            UnitConfigurationRenderer Renderer)
            : base(WindowSize)
        {
            _Parameters = Parameters;
            _Links      = UnitConfigurations;

            _Pane.Position = .5f * (WindowSize - _Pane.Size);

            var header = new Button("army-builder-header")
            {
                DisplayedString =
                    string.Format(
                        "{0} - {1} - {2}",
                        ObjectDescriber.Describe(Parameters.Faction),
                        ObjectDescriber.Describe(Parameters.Parameters.Setting.Front),
                        Parameters.Parameters.Year)
            };

            _UnitClassSelect.Position = new Vector2f(0, header.Size.Y);

            _AvailableUnits = new UnitConfigurationTable(
                "army-builder-table",
                "army-builder-table-row",
                "army-builder-table-cell",
                _Parameters.Faction,
                Renderer,
                false);
            _AvailableUnits.Position            = new Vector2f(0, _UnitClassSelect.Position.Y + _UnitClassSelect.Size.Y + 16);
            _AvailableUnits.OnUnitClicked      += HandleAddUnit;
            _AvailableUnits.OnUnitRightClicked += HandleUnitInfoRequested;

            _PointTotalButton          = new Button("army-builder-point-total");
            _PointTotalButton.Position = new Vector2f(_AvailableUnits.Size.X + 16, header.Size.Y);
            SetPointTotal(0);

            _SelectedUnits = new UnitConfigurationTable(
                "army-builder-table",
                "army-builder-table-row",
                "army-builder-table-cell",
                _Parameters.Faction,
                Renderer,
                true);
            _SelectedUnits.Position =
                new Vector2f(_AvailableUnits.Size.X + 16, _PointTotalButton.Position.Y + _PointTotalButton.Size.Y + 16);
            _SelectedUnits.OnUnitRightClicked += HandleRemoveUnit;

            foreach (UnitClass c in Enum.GetValues(typeof(UnitClass)))
            {
                _UnitClassSelect.Add(
                    new SelectionOption <UnitClass>("army-builder-select-option")
                {
                    DisplayedString = ObjectDescriber.Describe(c),
                    Value           = c
                });
            }

            _UnitClassSelect.OnChange += FilterUnits;
            FilterUnits();

            var finishedButton = new Button("army-builder-large-button")
            {
                DisplayedString = "Finished"
            };

            finishedButton.Position = _Pane.Size - finishedButton.Size - new Vector2f(32, 32);
            finishedButton.OnClick += HandleFinished;

            _Pane.Add(header);
            _Pane.Add(_AvailableUnits);
            _Pane.Add(_SelectedUnits);
            _Pane.Add(_PointTotalButton);
            _Pane.Add(_UnitClassSelect);
            _Pane.Add(finishedButton);
            _Items.Add(_Pane);
        }
        public HumanMatchPlayerController(
            MatchAdapter Match,
            IEnumerable <Army> AllowedArmies,
            UnitConfigurationRenderer UnitConfigurationRenderer,
            MatchScreen MatchScreen,
            KeyController KeyController)
        {
            _NewUnitBuffer = new EventBuffer <ValuedEventArgs <UnitView> >();

            this.Match                     = Match;
            this.AllowedArmies             = new HashSet <Army>(AllowedArmies);
            this.UnitConfigurationRenderer = UnitConfigurationRenderer;

            _MatchScreen = MatchScreen;
            _MatchScreen.OnFinishClicked += EndTurn;
            _MatchScreen.OnUnitAdded     += _NewUnitBuffer.Hook <ValuedEventArgs <UnitView> >(AddUnit).Invoke;
            _MatchScreen.OnPulse         += (sender, e) => _NewUnitBuffer.DispatchEvents();

            _Controllers = new Dictionary <TurnComponent, Subcontroller>
            {
                { TurnComponent.DEPLOYMENT, new DeploymentController(this) },
                { TurnComponent.AIRCRAFT, new AircraftController(this) },
                { TurnComponent.ANTI_AIRCRAFT, new AntiAircraftController(this) },
                { TurnComponent.ARTILLERY, new ArtilleryController(this) },
                { TurnComponent.ATTACK, new AttackController(this) },
                { TurnComponent.VEHICLE_COMBAT_MOVEMENT, new OverrunController(this) },
                { TurnComponent.VEHICLE_MOVEMENT, new MovementController(this, true) },
                { TurnComponent.CLOSE_ASSAULT, new CloseAssaultController(this) },
                { TurnComponent.NON_VEHICLE_MOVEMENT, new MovementController(this, false) },
                { TurnComponent.RESET, new NoOpController(this) },
                { TurnComponent.WAIT, new NoOpController(this) },
                { TurnComponent.SPECTATE, new NoOpController(this) }
            };

            foreach (TileView t in MatchScreen.MapView.TilesEnumerable)
            {
                t.OnClick      += OnTileClick;
                t.OnRightClick += OnTileRightClick;
            }
            foreach (UnitView u in _MatchScreen.UnitViews)
            {
                AddUnit(u);
            }
            _KeyController              = KeyController;
            KeyController.OnKeyPressed += OnKeyPressed;

            MatchScreen.LoadButton.OnClick +=
                (sender, e) => LoadUnit(_CurrentTurn.TurnComponent != TurnComponent.DEPLOYMENT);
            MatchScreen.UnloadButton.OnClick         += (sender, e) => UnloadUnit();
            MatchScreen.FortifyButton.OnClick        += (sender, e) => FortifyUnit();
            MatchScreen.AbandonButton.OnClick        += (sender, e) => AbandonUnit();
            MatchScreen.DismountButton.OnClick       += (sender, e) => Dismount();
            MatchScreen.MountButton.OnClick          += (sender, e) => Mount();
            MatchScreen.EvacuateButton.OnClick       += (sender, e) => Evacuate();
            MatchScreen.ReconButton.OnClick          += (sender, e) => Recon();
            MatchScreen.ClearMinefieldButton.OnClick += (sender, e) => ClearMinefield();
            MatchScreen.EmplaceButton.OnClick        += (sender, e) => Emplace();

            _AllowedActions = new Dictionary <Button, Func <bool> >
            {
                { MatchScreen.LoadButton, () => _Controllers[_CurrentTurn.TurnComponent].CanLoad() },
                { MatchScreen.UnloadButton, () => _Controllers[_CurrentTurn.TurnComponent].CanUnload() },
                { MatchScreen.FortifyButton, () => _Controllers[_CurrentTurn.TurnComponent].CanFortify() },
                { MatchScreen.AbandonButton, () => _Controllers[_CurrentTurn.TurnComponent].CanAbandon() },
                { MatchScreen.DismountButton, () => _Controllers[_CurrentTurn.TurnComponent].CanDismount() },
                { MatchScreen.MountButton, () => _Controllers[_CurrentTurn.TurnComponent].CanMount() },
                { MatchScreen.EvacuateButton, () => _Controllers[_CurrentTurn.TurnComponent].CanEvacuate() },
                { MatchScreen.ReconButton, () => _Controllers[_CurrentTurn.TurnComponent].CanRecon() },
                {
                    MatchScreen.ClearMinefieldButton,
                    () => _Controllers[_CurrentTurn.TurnComponent].CanClearMinefield()
                },
                { MatchScreen.EmplaceButton, () => _Controllers[_CurrentTurn.TurnComponent].CanEmplace() }
            };
        }
Пример #24
0
 public override DeploymentPage MakePage(DeploymentPane Pane, UnitConfigurationRenderer Renderer)
 {
     _DeploymentPage = new PositionalDeploymentPage(_Deployment, Renderer);
     _DeploymentPage.OnSelectedStack += HighlightDeploymentArea;
     return(_DeploymentPage);
 }
Пример #25
0
 public ScenarioView(Scenario Scenario, UnitConfigurationRenderer UnitRenderer, FactionRenderer FactionRenderer)
     : this()
 {
     SetScenario(Scenario, UnitRenderer, FactionRenderer);
 }