예제 #1
0
 bool IsClear(Actor self, Player currentOwner, Player originalOwner)
 {
     return(UnitsInRange().Where(a => a.Owner != originalOwner)
            .Where(a => a.Owner != currentOwner)
            .Where(a => CanBeCapturedBy(a))
            .All(a => WorldUtils.AreMutualAllies(a.Owner, currentOwner)));
 }
        void Won()
        {
            // Player has won
            foreach (var p in self.World.Players)
            {
                var cvc = p.PlayerActor.Trait <ConquestVictoryConditions>();

                if (p.WinState == WinState.Undefined && WorldUtils.AreMutualAllies(self.Owner, p))
                {
                    cvc.Win(p.PlayerActor);
                }
                else if (p.WinState == WinState.Undefined)
                {
                    cvc.Lose(p.PlayerActor);
                }
            }
        }
예제 #3
0
 bool IsClear(Actor self, Player captorOwner)
 {
     return(actorsInRange
            .All(a => a.Owner == captorOwner || WorldUtils.AreMutualAllies(a.Owner, captorOwner)));
 }
예제 #4
0
        public override void Draw()
        {
            if (!initialised)
            {
                Init();
            }

            if (!IsVisible())
            {
                return;
            }

            var rb     = RenderBounds;
            var offset = int2.Zero;

            var svc = world.Players.Select(p => p.PlayerActor.TraitOrDefault <StrategicVictoryConditions>()).FirstOrDefault();

            var totalWidth = svc.Total * 32;
            var curX       = -totalWidth / 2;

            foreach (var a in svc.AllPoints)
            {
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(rb.Left + curX, rb.Top));

                if (world.LocalPlayer != null && WorldUtils.AreMutualAllies(a.Actor.Owner, world.LocalPlayer))
                {
                    WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(rb.Left + curX, rb.Top));
                }
                else if (!a.Actor.Owner.NonCombatant)
                {
                    WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(rb.Left + curX, rb.Top));
                }

                curX += 32;
            }

            offset += new int2(0, 32);

            if (world.LocalPlayer == null)
            {
                return;
            }
            var pendingWinner = FindFirstWinningPlayer(world);

            if (pendingWinner == null)
            {
                return;
            }
            var winnerSvc = pendingWinner.PlayerActor.Trait <StrategicVictoryConditions>();

            var isVictory = pendingWinner == world.LocalPlayer || !WorldUtils.AreMutualAllies(pendingWinner, world.LocalPlayer);
            var tc        = "Strategic {0} in {1}".F(
                isVictory ? "victory" : "defeat",
                WidgetUtils.FormatTime(winnerSvc.TicksLeft));

            var font = Game.Renderer.Fonts["Bold"];

            var size = font.Measure(tc);

            font.DrawTextWithContrast(tc, offset + new float2(rb.Left - size.X / 2 + 1, rb.Top + 1), Color.White, Color.Black, 1);
            offset += new int2(0, size.Y + 1);
        }