Example #1
0
        public Player(World world, Session.Client client, PlayerReference pr, int index)
        {
            World = world;
            Index = index;
            Palette = "player" + index;
            InternalName = pr.Name;
            PlayerRef = pr;

            if (client != null)
            {
                ClientIndex = client.Index;
                ColorRamp = client.ColorRamp;
                PlayerName = client.Name;

                Country = world.GetCountries()
                    .FirstOrDefault(c => client.Country == c.Race)
                    ?? world.GetCountries().Random(world.SharedRandom);
            }
            else
            {
                ClientIndex = 0; 		/* it's a map player, "owned" by host */
                ColorRamp = pr.ColorRamp;
                PlayerName = pr.Name;
                NonCombatant = pr.NonCombatant;

                Country = world.GetCountries()
                    .FirstOrDefault(c => pr.Race == c.Race)
                    ?? world.GetCountries().Random(world.SharedRandom);
            }

            PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) });
        }
Example #2
0
 public static void SyncClientToPlayerReference(Session.Client c, PlayerReference pr)
 {
     if (pr == null)
     {
         return;
     }
     if (pr.LockColor)
     {
         c.Color = pr.Color;
     }
     else
     {
         c.Color = c.PreferredColor;
     }
     if (pr.LockRace)
     {
         c.Country = pr.Race;
     }
     if (pr.LockSpawn)
     {
         c.SpawnPoint = pr.Spawn;
     }
     if (pr.LockTeam)
     {
         c.Team = pr.Team;
     }
 }
Example #3
0
        public static void SetMapPlayers(string section, string faction, string color, IniFile file, List<string> players, MapPlayers mapPlayers)
        {
            var pr = new PlayerReference
            {
                Name = section,
                OwnsWorld = section == "Neutral",
                NonCombatant = section == "Neutral",
                Faction = faction,
                Color = namedColorMapping[color]
            };

            var neutral = new[] { "Neutral" };
            foreach (var s in file.GetSection(section, true))
            {
                switch (s.Key)
                {
                case "Allies":
                    pr.Allies = s.Value.Split(',').Intersect(players).Except(neutral).ToArray();
                    pr.Enemies = s.Value.Split(',').SymmetricDifference(players).Except(neutral).ToArray();
                    break;
                default:
                    Console.WriteLine("Ignoring unknown {0}={1} for player {2}", s.Key, s.Value, pr.Name);
                    break;
                }
            }

            // Overwrite default player definitions if needed
            if (!mapPlayers.Players.ContainsKey(section))
                mapPlayers.Players.Add(section, pr);
            else
                mapPlayers.Players[section] = pr;
        }
Example #4
0
 public AddActorAction(EditorActorLayer editorLayer, ActorInfo actor, CPos cell, PlayerReference owner, int facing)
 {
     this.editorLayer = editorLayer;
     this.actor       = actor;
     this.cell        = cell;
     this.owner       = owner;
     this.facing      = facing;
 }
Example #5
0
        public void PlayerReferenceCanBeRenamed()
        {
            PlayerReference playerReference = tournament.RegisterPlayerReference("Maru");

            playerReference.RenameTo("Idra");

            playerReference.Name.Should().Be("Idra");
        }
Example #6
0
        public void PlayerReferenceCannotBeRenamedToEmptyName()
        {
            PlayerReference playerReference = tournament.RegisterPlayerReference("Maru");

            playerReference.RenameTo("");

            playerReference.Name.Should().Be("Maru");
        }
Example #7
0
        private object ReadParameter(BitStream s, ParameterDefinition paramDefinition)
        {
            IParameter param = null;

            switch (paramDefinition.ParameterType)
            {
            case ParameterType.Float: { param = new FloatValue(); } break;

            case ParameterType.EntityFilter: { param = new EntityFilter(); } break;

            case ParameterType.GenericReference: { param = new GenericReference(); } break;

            case ParameterType.IntegerReference: { param = new IntegerReference(); } break;

            case ParameterType.Meter: { param = new MeterData(); } break;

            case ParameterType.ObjectReference: { param = new ObjectReference(); } break;

            case ParameterType.PlayerReference: { param = new PlayerReference(); } break;

            case ParameterType.Shape: { param = new BoundaryData(); } break;

            case ParameterType.StringReference: { param = new StringReference(); } break;

            case ParameterType.StringReferenceOneToken: { param = new StringReferenceOneToken(); } break;

            case ParameterType.StringReferenceTwoTokens: { param = new StringReferenceTwoTokens(); } break;

            case ParameterType.StringReferenceThreeTokens: { param = new StringReferenceThreeTokens(); } break;

            case ParameterType.TargetReference: { param = new TargetReference(); } break;

            case ParameterType.TeamReference: { param = new TeamReference(); } break;

            case ParameterType.TimerReference: { param = new TimerReference(); } break;

            case ParameterType.VirtualTrigger: { param = new VirtualTrigger(); } break;

            case ParameterType.WaypointIcon: { param = new WaypointIconData(); } break;

            case ParameterType.Coordinates3d: { param = new Coordinates3d(); } break;

            case ParameterType.Boolean:
                return(s.Reader.ReadBit());

            default:
                object value = 0;
                StreamIntegerValue(s, paramDefinition, ref value);
                return(value);
            }

            if (param != null)
            {
                param.SerializeObject(s, paramDefinition);
            }

            return(param);
        }
Example #8
0
    private void DamageArea()
    {
        dmgBaseStats.Clear();

        PlayerReference pRef = GeneralVariables.playerRef;

        if (shakeCamera && pRef != null)
        {
            float shakeDistance = Vector3.Distance(tr.position, pRef.transform.position);
            if (shakeDistance < shakeRadius)
            {
                pRef.GetComponent <PlayerLook>().ShakeCamera(shakeLength, shakeSpeed, shakeIntensity * 2.5f * Mathf.Clamp01((shakeRadius - shakeDistance) / shakeRadius));
            }
        }

        damageRadius = damageFalloff[damageFalloff.length - 1].time;
        toAffect     = Physics.OverlapSphere(tr.position, ((overrideMaxRange > 0f) ? overrideMaxRange : damageRadius), layersToDamage.value);

        foreach (Collider col in toAffect)
        {
            float distanceFromCollider = Mathf.Clamp(Vector3.Distance(tr.position, col.ClosestPointOnBounds(tr.position)), 0, (overrideMaxRange > 0f) ? overrideMaxRange : damageRadius);

            float evalDamage = damageFalloff.Evaluate(distanceFromCollider * ((overrideMaxRange > 0f) ? (damageRadius / overrideMaxRange) : 1f));
            if (overrideMaxDmg > 0)
            {
                evalDamage *= ((float)overrideMaxDmg / damageFalloff.Evaluate(0f));
            }

            if (isEMP || evalDamage >= 0.5f)
            {
                int  dmg          = Mathf.RoundToInt(evalDamage);
                bool thisIsTarget = (hitTarget != null && col.GetInstanceID() == hitTarget.GetComponent <Collider>().GetInstanceID());

                if (raycastCheck)
                {
                    if (thisIsTarget || Physics.Raycast(tr.position + raycastOffset, (col.bounds.center - (tr.position + raycastOffset)), out hit, ((overrideMaxRange > 0f) ? overrideMaxRange : damageRadius), layersToDamage.value))
                    {
                        if (!thisIsTarget && hit.collider.GetInstanceID() != col.GetInstanceID())
                        {
                            continue;
                        }

                        DoAreaAction(col, ((overrideMaxRange > 0f) ? overrideMaxRange : damageRadius), dmg + ((thisIsTarget) ? bonusDamage : 0), distanceFromCollider);
                    }
                }
                else
                {
                    DoAreaAction(col, ((overrideMaxRange > 0f) ? overrideMaxRange : damageRadius), dmg + ((thisIsTarget) ? bonusDamage : 0), distanceFromCollider);
                    continue;
                }
            }
        }

        lastDamageTime = Time.time;
        bonusDamage    = 0;
        hitTarget      = null;
    }
Example #9
0
        public EditorActorPreview(WorldRenderer worldRenderer, string id, ActorReference reference, PlayerReference owner)
        {
            ID                 = id;
            this.reference     = reference;
            Owner              = owner;
            this.worldRenderer = worldRenderer;

            if (!reference.Contains <FactionInit>())
            {
                reference.Add(new FactionInit(owner.Faction));
            }

            if (!reference.Contains <OwnerInit>())
            {
                reference.Add(new OwnerInit(owner.Name));
            }

            var world = worldRenderer.World;

            if (!world.Map.Rules.Actors.TryGetValue(reference.Type.ToLowerInvariant(), out Info))
            {
                throw new InvalidDataException($"Actor {id} of unknown type {reference.Type.ToLowerInvariant()}");
            }

            CenterPosition = PreviewPosition(world, reference);

            var location = reference.Get <LocationInit>().Value;
            var ios      = Info.TraitInfoOrDefault <IOccupySpaceInfo>();

            var subCellInit = reference.GetOrDefault <SubCellInit>();
            var subCell     = subCellInit != null ? subCellInit.Value : SubCell.Any;

            var radarColorInfo = Info.TraitInfoOrDefault <RadarColorFromTerrainInfo>();

            RadarColor = radarColorInfo == null ? owner.Color : radarColorInfo.GetColorFromTerrain(world);

            Footprint = ios?.OccupiedCells(Info, location, subCell) ?? new Dictionary <CPos, SubCell>()
            {
                { location, SubCell.FullCell }
            };

            tooltip = Info.TraitInfos <EditorOnlyTooltipInfo>().FirstOrDefault(info => info.EnabledByDefault) as TooltipInfoBase
                      ?? Info.TraitInfos <TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault);

            DescriptiveName = tooltip != null ? tooltip.Name : Info.Name;

            GeneratePreviews();

            // Bounds are fixed from the initial render.
            // If this is a problem, then we may need to fetch the area from somewhere else
            var r = previews.SelectMany(p => p.ScreenBounds(worldRenderer, CenterPosition));

            Bounds = r.Union();

            SelectionBox = new SelectionBoxAnnotationRenderable(new WPos(CenterPosition.X, CenterPosition.Y, 8192),
                                                                new Rectangle(Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height), Color.White);
        }
Example #10
0
        public bool RenamePlayerReferenceInTournament(PlayerReference playerReference, string name)
        {
            if (playerReference != null)
            {
                return(playerReference.RenameTo(name));
            }

            return(false);
        }
Example #11
0
        public EditorActorBrush(EditorViewportControllerWidget editorWidget, ActorInfo actor, PlayerReference owner, WorldRenderer wr)
        {
            this.editorWidget   = editorWidget;
            worldRenderer       = wr;
            world               = wr.World;
            editorLayer         = world.WorldActor.Trait <EditorActorLayer>();
            editorActionManager = world.WorldActor.Trait <EditorActionManager>();

            Actor      = actor;
            this.owner = owner;
            var ownerName = owner.Name;

            preview           = editorWidget.Get <ActorPreviewWidget>("DRAG_ACTOR_PREVIEW");
            preview.GetScale  = () => worldRenderer.Viewport.Zoom;
            preview.IsVisible = () => editorWidget.CurrentBrush == this;

            var buildingInfo = actor.TraitInfoOrDefault <BuildingInfo>();

            if (buildingInfo != null)
            {
                centerOffset = buildingInfo.CenterOffset(world);
            }

            // Enforce first entry of ValidOwnerNames as owner if the actor has RequiresSpecificOwners
            var specificOwnerInfo = actor.TraitInfoOrDefault <RequiresSpecificOwnersInfo>();

            if (specificOwnerInfo != null && !specificOwnerInfo.ValidOwnerNames.Contains(ownerName))
            {
                ownerName = specificOwnerInfo.ValidOwnerNames.First();
            }

            var td = new TypeDictionary();

            td.Add(new FacingInit(facing));
            td.Add(new TurretFacingInit(facing));
            td.Add(new OwnerInit(ownerName));
            td.Add(new FactionInit(owner.Faction));
            preview.SetPreview(actor, td);

            var ios = actor.TraitInfoOrDefault <IOccupySpaceInfo>();

            if (ios != null)
            {
                footprint = ios.OccupiedCells(actor, CPos.Zero)
                            .Select(c => c.Key - CPos.Zero)
                            .ToArray();
            }
            else
            {
                footprint = new CVec[0];
            }

            // The preview widget may be rendered by the higher-level code before it is ticked.
            // Force a manual tick to ensure the bounds are set correctly for this first draw.
            Tick();
        }
Example #12
0
    void Start()
    {
        defaultPos = transform.localPosition;
        defaultRot = transform.localEulerAngles;

        PlayerReference pr = GeneralVariables.playerRef;

        pm = pr.GetComponent <PlayerMovement>();
        ac = pr.ac;
    }
Example #13
0
        public void CanGetPlayerInTournamentByPlayerName()
        {
            PlayerReference playerReference = tournament.RegisterPlayerReference("Maru");

            PlayerReference fetchedPlayerReference = tournament.GetPlayerReferenceByName(playerReference.Name);

            fetchedPlayerReference.Should().NotBeNull();
            fetchedPlayerReference.Id.Should().Be(playerReference.Id);
            fetchedPlayerReference.Name.Should().Be(playerReference.Name);
        }
Example #14
0
        public void CanAssignNewPlayerReferencesToMatch()
        {
            PlayerReference taejaPlayerReference = PlayerReference.Create("Taeja", tournament);
            PlayerReference rainPlayerReference  = PlayerReference.Create("Rain", tournament);

            match.AssignPlayerReferencesToPlayers(taejaPlayerReference.Id, rainPlayerReference.Id);

            match.Player1.PlayerReferenceId.Should().Be(taejaPlayerReference.Id);
            match.Player2.PlayerReferenceId.Should().Be(rainPlayerReference.Id);
        }
Example #15
0
    void Start()
    {
        tr  = transform;
        pTr = tr.parent;

        PlayerReference pr = GeneralVariables.playerRef;

        pm = pr.GetComponent <PlayerMovement>();
        pv = pr.GetComponent <PlayerVitals>();
        ac = pr.ac;
    }
Example #16
0
        public void MatchRemainsUnchangedWhenAddingPlayerReferenceToMatchWithTwoPlayersAlready()
        {
            PlayerReference playerReference = PlayerReference.Create("Taeja", tournament);

            match.AssignPlayerReferenceToFirstAvailablePlayer(playerReference.Id);

            match.Player1.PlayerReferenceId.Should().NotBeEmpty();
            match.Player1.GetName().Should().Be(firstPlayerName);
            match.Player2.PlayerReferenceId.Should().NotBeEmpty();
            match.Player2.GetName().Should().Be(secondPlayerName);
        }
 void Start()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Debug.LogError("На сцене не может быть больше одного игрока!");
     }
 }
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else if (instance != this)
     {
         Destroy(gameObject);
     }
 }
Example #19
0
        public void CanCreatePlayerReferencesWithNamesThatOnlyDifferInLetterCasing()
        {
            string playerName1 = "HerO";
            string playerName2 = "herO";

            PlayerReference playerReference1 = tournament.RegisterPlayerReference(playerName1);
            PlayerReference playerReference2 = tournament.RegisterPlayerReference(playerName2);

            playerReference1.Name.Should().Be(playerName1);
            playerReference2.Name.Should().Be(playerName2);
        }
Example #20
0
        public int SetActor(WorldRenderer wr, ActorInfo actor, PlayerReference owner)
        {
            var ios          = actor.TraitInfoOrDefault <IOccupySpaceInfo>();
            var buildingInfo = ios as BuildingInfo;

            actorCenterOffset = buildingInfo != null?buildingInfo.CenterOffset(world) : WVec.Zero;

            actorSharesCell = ios != null && ios.SharesCell;
            actorSubCell    = SubCell.Invalid;

            // Enforce first entry of ValidOwnerNames as owner if the actor has RequiresSpecificOwners
            var ownerName         = owner.Name;
            var specificOwnerInfo = actor.TraitInfoOrDefault <RequiresSpecificOwnersInfo>();

            if (specificOwnerInfo != null && !specificOwnerInfo.ValidOwnerNames.Contains(ownerName))
            {
                ownerName = specificOwnerInfo.ValidOwnerNames.First();
            }

            var reference = new ActorReference(actor.Name);

            reference.Add(new OwnerInit(ownerName));
            reference.Add(new FactionInit(owner.Faction));

            var worldPx = wr.Viewport.ViewToWorldPx(Viewport.LastMousePos) - wr.ScreenPxOffset(actorCenterOffset);
            var cell    = wr.Viewport.ViewToWorld(wr.Viewport.WorldToViewPx(worldPx));

            reference.Add(new LocationInit(cell));
            if (ios != null && ios.SharesCell)
            {
                actorSubCell = editorLayer.FreeSubCellAt(cell);
                if (actorSubCell != SubCell.Invalid)
                {
                    reference.Add(new SubCellInit(actorSubCell));
                }
            }

            if (actor.HasTraitInfo <IFacingInfo>())
            {
                reference.Add(new FacingInit(info.PreviewFacing));
            }

            if (actor.HasTraitInfo <TurretedInfo>())
            {
                reference.Add(new TurretFacingInit(info.PreviewFacing));
            }

            Type            = EditorCursorType.Actor;
            Actor           = new EditorActorPreview(wr, null, reference, owner);
            TerrainTemplate = null;
            Resource        = null;

            return(++CurrentToken);
        }
Example #21
0
        public void CannotAssignSamePlayerReferenceAsBothPlayersInMatch()
        {
            Guid firstPlayerReferenceId  = match.Player1.PlayerReferenceId;
            Guid secondPlayerReferenceId = match.Player2.PlayerReferenceId;

            PlayerReference playerReference = PlayerReference.Create("Taeja", tournament);

            match.AssignPlayerReferencesToPlayers(playerReference.Id, playerReference.Id);

            match.Player1.PlayerReferenceId.Should().Be(firstPlayerReferenceId);
            match.Player2.PlayerReferenceId.Should().Be(secondPlayerReferenceId);
        }
Example #22
0
        public static PlayerDto ConvertToPlayerDto(Player player)
        {
            Tournament      tournament      = player.Match.Group.Round.Tournament;
            PlayerReference playerReference = tournament.GetPlayerReferenceById(player.Id);

            return(new PlayerDto()
            {
                Id = player.Id,
                Name = playerReference.Name,
                Score = player.Score
            });
        }
Example #23
0
        public void CanCreatePlayerReference()
        {
            string name = "Maru";

            PlayerReference playerReference = PlayerReference.Create(name, tournament);

            playerReference.Should().NotBeNull();
            playerReference.Id.Should().NotBeEmpty();
            playerReference.Name.Should().Be(name);
            playerReference.TournamentId.Should().Be(tournament.Id);
            playerReference.Tournament.Should().Be(tournament);
        }
Example #24
0
    public void AddPlayer(int id, String name)
    {
        Label playerLabel = new Label();

        playerLabel.Name = id.ToString();
        playerLabel.Text = name;
        playerLabel.AddFontOverride("font", (Font)GD.Load("res://Assets/Fonts/Default.tres"));
        GetNode("UI/VBoxContainer/Players").AddChild(playerLabel);

        PlayerReference playerReference = new PlayerReference(id, name);

        ClientVariables.ConnectedPlayers.Add(playerReference);
    }
Example #25
0
        public void MatchMustContainDifferentPlayers()
        {
            Tournament      tournament      = Tournament.Create("GSL 2019");
            BracketRound    bracketRound    = tournament.AddBracketRound() as BracketRound;
            PlayerReference playerReference = tournament.RegisterPlayerReference(firstPlayerName);

            Match match = bracketRound.Groups.First().Matches.First();

            match.AssignPlayerReferencesToPlayers(playerReference.Id, playerReference.Id);

            match.Player1.PlayerReferenceId.Should().Be(playerReference.Id);
            match.Player2.PlayerReferenceId.Should().BeEmpty();
        }
Example #26
0
        public void PlayerReferenceCannotBeRenamedToNameThatOnlyDiffersInWhitespaceToOtherPlayerReference()
        {
            string playerName1 = "Maru";
            string playerName2 = "Idra";

            PlayerReference playerReference1 = tournament.RegisterPlayerReference(playerName1);
            PlayerReference playerReference2 = tournament.RegisterPlayerReference(playerName2);

            playerReference2.RenameTo(playerName1 + " ");

            playerReference1.Name.Should().Be(playerName1);
            playerReference2.Name.Should().Be(playerName2);
        }
Example #27
0
        public void PlayerReferenceCannotBeRenamedToNameThatIsExactlyTheSameAsOtherPlayerReference()
        {
            string playerName1 = "Maru";
            string playerName2 = "Idra";

            PlayerReference playerReference1 = tournament.RegisterPlayerReference(playerName1);
            PlayerReference playerReference2 = tournament.RegisterPlayerReference(playerName2);

            playerReference2.RenameTo(playerName1);

            playerReference1.Name.Should().Be(playerName1);
            playerReference2.Name.Should().Be(playerName2);
        }
Example #28
0
        public void PlayerReferenceCanBeRenamedToNameThatOnlyDiffersInLetterCasing()
        {
            string playerName1 = "HerO";
            string playerName2 = "herO";

            PlayerReference playerReference1 = tournament.RegisterPlayerReference(playerName1);
            PlayerReference playerReference2 = tournament.RegisterPlayerReference("Maru");

            playerReference2.RenameTo(playerName2);

            playerReference1.Name.Should().Be(playerName1);
            playerReference2.Name.Should().Be(playerName2);
        }
Example #29
0
		public static void SyncClientToPlayerReference(Session.Client c, PlayerReference pr)
		{
			if (pr == null)
				return;

			if (pr.LockFaction)
				c.Faction = pr.Faction;
			if (pr.LockSpawn)
				c.SpawnPoint = pr.Spawn;
			if (pr.LockTeam)
				c.Team = pr.Team;

			c.Color = pr.LockColor ? pr.Color : c.PreferredColor;
		}
Example #30
0
		public static void SyncClientToPlayerReference(Session.Client c, PlayerReference pr)
		{
			if (pr == null)
				return;

			if (pr.LockFaction)
				c.Faction = pr.Faction;
			if (pr.LockSpawn)
				c.SpawnPoint = pr.Spawn;
			if (pr.LockTeam)
				c.Team = pr.Team;

			c.Color = pr.LockColor ? pr.Color : c.PreferredColor;
		}
Example #31
0
    public void SetReferenceVars()
    {
        PlayerReference pRef = GeneralVariables.playerRef;

        if (pRef != null)
        {
            pe  = pRef.GetComponent <PlayerEffects>();
            wm  = pRef.wm;
            dm  = pRef.dm;
            pm  = pRef.GetComponent <PlayerMovement>();
            ac  = pRef.ac;
            acs = pRef.acs;
        }
    }
Example #32
0
        public void CanRegisterPlayerReferencesToTournament()
        {
            string playerName = "Maru";

            RoundRobinRound round = tournament.AddRoundRobinRound();

            PlayerReference playerReference = tournament.RegisterPlayerReference(playerName);

            playerReference.Id.Should().NotBeEmpty();
            playerReference.Name.Should().Be(playerName);
            playerReference.TournamentId.Should().Be(round.TournamentId);
            playerReference.Tournament.Should().Be(round.Tournament);

            tournament.PlayerReferences.First().Should().Be(playerReference);
        }
Example #33
0
		public static void SyncClientToPlayerReference(Session.Client c, PlayerReference pr)
		{
			if (pr == null)
				return;
			if (pr.LockColor)
				c.Color = pr.Color;
			else
				c.Color = c.PreferredColor;
			if (pr.LockRace)
				c.Country = pr.Race;
			if (pr.LockSpawn)
				c.SpawnPoint = pr.Spawn;
			if (pr.LockTeam)
				c.Team = pr.Team;
		}
Example #34
0
    void Start()
    {
        tr = transform;

        PlayerReference pr = GeneralVariables.playerRef;

        dm = pr.dm;
        wm = pr.wm;
        ac = pr.ac;
        cb = pr.cb;

        mainCamTr    = GeneralVariables.mainPlayerCamera.transform;
        useLabel     = GeneralVariables.uiController.useGUI;
        useKeyString = cInput.GetText("Use", 1);
    }
Example #35
0
        public Player(World world, Session.Client client, Session.Slot slot, PlayerReference pr)
        {
            World = world;
            InternalName = pr.Name;
            PlayerReference = pr;
            string botType = null;

            // Real player or host-created bot
            if (client != null)
            {
                ClientIndex = client.Index;
                ColorRamp = client.ColorRamp;
                PlayerName = client.Name;
                botType = client.Bot;

                Country = world.GetCountries()
                    .FirstOrDefault(c => client.Country == c.Race)
                    ?? world.GetCountries().Random(world.SharedRandom);
            }
            else
            {
                // Map player
                ClientIndex = 0; // Owned by the host (todo: fix this)
                ColorRamp = pr.ColorRamp;
                PlayerName = pr.Name;
                NonCombatant = pr.NonCombatant;
                botType = pr.Bot;

                Country = world.GetCountries()
                    .FirstOrDefault(c => pr.Race == c.Race)
                    ?? world.GetCountries().Random(world.SharedRandom);
            }
            PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) });

            // Enable the bot logic on the host
            IsBot = botType != null;
            if (IsBot && Game.IsHost)
            {
                var logic = PlayerActor.TraitsImplementing<IBot>()
                            .FirstOrDefault(b => b.Info.Name == botType);
                if (logic == null)
                    Log.Write("debug", "Invalid bot type: {0}", botType);
                else
                    logic.Activate(this);
            }
        }
Example #36
0
        public ActorSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer)
        {
            mapRules = world.Map.Rules;
            this.world = world;
            this.worldRenderer = worldRenderer;

            editor = widget.Parent.Get<EditorViewportControllerWidget>("MAP_EDITOR");
            ownersDropDown = widget.Get<DropDownButtonWidget>("OWNERS_DROPDOWN");

            panel = widget.Get<ScrollPanelWidget>("ACTORTEMPLATE_LIST");
            itemTemplate = panel.Get<ScrollItemWidget>("ACTORPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            var editorLayer = world.WorldActor.Trait<EditorActorLayer>();

            selectedOwner = editorLayer.Players.Players.Values.First();
            Func<PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () =>
                {
                    selectedOwner = option;

                    ownersDropDown.Text = selectedOwner.Name;
                    ownersDropDown.TextColor = selectedOwner.Color.RGB;

                    IntializeActorPreviews();
                });

                item.Get<LabelWidget>("LABEL").GetText = () => option.Name;
                item.GetColor = () => option.Color.RGB;

                return item;
            };

            ownersDropDown.OnClick = () =>
            {
                var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name);
                ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
            };

            ownersDropDown.Text = selectedOwner.Name;
            ownersDropDown.TextColor = selectedOwner.Color.RGB;

            IntializeActorPreviews();
        }
Example #37
0
        public Player(World world, Session.Client client, PlayerReference pr, int index)
        {
            World = world;
            Index = index;
            Palette = "player" + index;
            ColorRamp = client.ColorRamp;
            PlayerName = client.Name;

            InternalName = pr.Name;
            Country = world.GetCountries()
                .FirstOrDefault(c => client != null && client.Country == c.Race)
                ?? world.GetCountries().Random(world.SharedRandom);

            ClientIndex = client.Index;
            PlayerRef = pr;

            PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) });
        }
Example #38
0
        public Player(World world, Session.Client client, Session.Slot slot, PlayerReference pr)
        {
            World = world;
            InternalName = pr.Name;
            PlayerReference = pr;
            string botType = null;

            // Real player or host-created bot
            if (client != null)
            {
                ClientIndex = client.Index;
                Color = client.Color;
                PlayerName = client.Name;
                botType = client.Bot;
                Country = ChooseCountry(world, client.Country);
            }
            else
            {
                // Map player
                ClientIndex = 0; // Owned by the host (TODO: fix this)
                Color = pr.Color;
                PlayerName = pr.Name;
                NonCombatant = pr.NonCombatant;
                Playable = pr.Playable;
                Spectating = pr.Spectating;
                botType = pr.Bot;
                Country = ChooseCountry(world, pr.Race);
            }
            PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) });
            Shroud = PlayerActor.Trait<Shroud>();

            // Enable the bot logic on the host
            IsBot = botType != null;
            if (IsBot && Game.IsHost)
            {
                var logic = PlayerActor.TraitsImplementing<IBot>()
                            .FirstOrDefault(b => b.Info.Name == botType);
                if (logic == null)
                    Log.Write("debug", "Invalid bot type: {0}", botType);
                else
                    logic.Activate(this);
            }
        }
Example #39
0
        public EditorActorBrush(EditorViewportControllerWidget editorWidget, ActorInfo actor, PlayerReference owner, WorldRenderer wr)
        {
            this.editorWidget = editorWidget;
            worldRenderer = wr;
            world = wr.World;
            editorLayer = world.WorldActor.Trait<EditorActorLayer>();

            Actor = actor;
            this.owner = owner;

            preview = editorWidget.Get<ActorPreviewWidget>("DRAG_ACTOR_PREVIEW");
            preview.GetScale = () => worldRenderer.Viewport.Zoom;
            preview.IsVisible = () => editorWidget.CurrentBrush == this;

            var buildingInfo = actor.TraitInfoOrDefault<BuildingInfo>();
            if (buildingInfo != null)
            {
                locationOffset = -FootprintUtils.AdjustForBuildingSize(buildingInfo);
                previewOffset = FootprintUtils.CenterOffset(world, buildingInfo);
            }

            var td = new TypeDictionary();
            td.Add(new FacingInit(facing));
            td.Add(new TurretFacingInit(facing));
            td.Add(new OwnerInit(owner.Name));
            td.Add(new FactionInit(owner.Faction));
            preview.SetPreview(actor, td);

            var ios = actor.TraitInfoOrDefault<IOccupySpaceInfo>();
            if (ios != null)
                footprint = ios.OccupiedCells(actor, CPos.Zero)
                    .Select(c => c.Key - CPos.Zero)
                    .ToArray();
            else
                footprint = new CVec[0];

            // The preview widget may be rendered by the higher-level code before it is ticked.
            // Force a manual tick to ensure the bounds are set correctly for this first draw.
            Tick();
        }
Example #40
0
        public Player( World world, PlayerReference pr, int index )
        {
            World = world;
            Shroud = new ShroudRenderer(this, world.Map);

            Index = index;
            Palette = "player"+index;
            Color = pr.Color;
            Color2 = pr.Color2;
            ClientIndex = 0;		/* it's a map player, "owned" by host */

            PlayerName = InternalName = pr.Name;
            NonCombatant = pr.NonCombatant;
            Country = world.GetCountries()
                .FirstOrDefault(c => pr.Race == c.Race)
                ?? world.GetCountries().Random(world.SharedRandom);

            PlayerRef = pr;

            RegisterPlayerColor(world, Palette);
            PlayerActor = world.CreateActor("Player", new TypeDictionary{ new OwnerInit( this ) });
        }
Example #41
0
        public Map(string path)
        {
            Path = path;
            container = FileSystem.OpenPackage(path, null, int.MaxValue);

            AssertExists("map.yaml");
            AssertExists("map.bin");

            var yaml = new MiniYaml(null, MiniYaml.FromStream(container.GetContent("map.yaml")));
            FieldLoader.Load(this, yaml);
            Uid = ComputeHash();

            // Support for formats 1-3 dropped 2011-02-11.
            // Use release-20110207 to convert older maps to format 4
            // Use release-20110511 to convert older maps to format 5
            if (MapFormat < 5)
                throw new InvalidDataException("Map format {0} is not supported.\n File: {1}".F(MapFormat, path));

            // Load players
            foreach (var kv in yaml.NodesDict["Players"].NodesDict)
            {
                var player = new PlayerReference(kv.Value);
                Players.Add(player.Name, player);
            }

            Actors = Lazy.New(() =>
            {
                var ret = new Dictionary<string, ActorReference>();
                foreach (var kv in yaml.NodesDict["Actors"].NodesDict)
                    ret.Add(kv.Key, new ActorReference(kv.Value.Value, kv.Value.NodesDict));
                return ret;
            });

            // Smudges
            Smudges = Lazy.New(() =>
            {
                var ret = new List<SmudgeReference>();
                foreach (var kv in yaml.NodesDict["Smudges"].NodesDict)
                {
                    var vals = kv.Key.Split(' ');
                    var loc = vals[1].Split(',');
                    ret.Add(new SmudgeReference(vals[0], new int2(int.Parse(loc[0]), int.Parse(loc[1])), int.Parse(vals[2])));
                }

                return ret;
            });

            Rules = MiniYaml.NodesOrEmpty(yaml, "Rules");
            Sequences = MiniYaml.NodesOrEmpty(yaml, "Sequences");
            VoxelSequences = MiniYaml.NodesOrEmpty(yaml, "VoxelSequences");
            Weapons = MiniYaml.NodesOrEmpty(yaml, "Weapons");
            Voices = MiniYaml.NodesOrEmpty(yaml, "Voices");
            Notifications = MiniYaml.NodesOrEmpty(yaml, "Notifications");

            CustomTerrain = new string[MapSize.X, MapSize.Y];

            MapTiles = Lazy.New(() => LoadMapTiles());
            MapResources = Lazy.New(() => LoadResourceTiles());
        }
Example #42
0
        public void MakeDefaultPlayers()
        {
            var firstRace = OpenRA.Rules.Info["world"].Traits
                .WithInterface<CountryInfo>().First(c => c.Selectable).Race;

            if (!Players.ContainsKey("Neutral"))
                Players.Add("Neutral", new PlayerReference
                {
                    Name = "Neutral",
                    Race = firstRace,
                    OwnsWorld = true,
                    NonCombatant = true
                });

            var numSpawns = GetSpawnPoints().Length;
            for (var index = 0; index < numSpawns; index++)
            {
                if (Players.ContainsKey("Multi{0}".F(index)))
                    continue;

                var p = new PlayerReference
                {
                    Name = "Multi{0}".F(index),
                    Race = "Random",
                    Playable = true,
                    Enemies = new[] { "Creeps" }
                };
                Players.Add(p.Name, p);
            }

            Players.Add("Creeps", new PlayerReference
            {
                Name = "Creeps",
                Race = firstRace,
                NonCombatant = true,
                Enemies = Players.Where(p => p.Value.Playable).Select(p => p.Key).ToArray()
            });
        }
Example #43
0
        // Support upgrading format 5 maps to a more
        // recent version by defining upgradeForMod.
        public Map(string path, string upgradeForMod)
        {
            Path = path;
            Container = FileSystem.OpenPackage(path, null, int.MaxValue);

            AssertExists("map.yaml");
            AssertExists("map.bin");

            var yaml = new MiniYaml(null, MiniYaml.FromStream(Container.GetContent("map.yaml")));
            FieldLoader.Load(this, yaml);

            // Support for formats 1-3 dropped 2011-02-11.
            // Use release-20110207 to convert older maps to format 4
            // Use release-20110511 to convert older maps to format 5
            if (MapFormat < 5)
                throw new InvalidDataException("Map format {0} is not supported.\n File: {1}".F(MapFormat, path));

            // Format 5 -> 6 enforces the use of RequiresMod
            if (MapFormat == 5)
            {
                if (upgradeForMod == null)
                    throw new InvalidDataException("Map format {0} is not supported, but can be upgraded.\n File: {1}".F(MapFormat, path));

                Console.WriteLine("Upgrading {0} from Format 5 to Format 6", path);

                // TODO: This isn't very nice, but there is no other consistent way
                // of finding the mod early during the engine initialization.
                RequiresMod = upgradeForMod;
            }

            // Load players
            foreach (var kv in yaml.NodesDict["Players"].NodesDict)
            {
                var player = new PlayerReference(kv.Value);
                Players.Add(player.Name, player);
            }

            Actors = Lazy.New(() =>
            {
                var ret = new Dictionary<string, ActorReference>();
                foreach (var kv in yaml.NodesDict["Actors"].NodesDict)
                    ret.Add(kv.Key, new ActorReference(kv.Value.Value, kv.Value.NodesDict));
                return ret;
            });

            // Smudges
            Smudges = Lazy.New(() =>
            {
                var ret = new List<SmudgeReference>();
                foreach (var kv in yaml.NodesDict["Smudges"].NodesDict)
                {
                    var vals = kv.Key.Split(' ');
                    var loc = vals[1].Split(',');
                    ret.Add(new SmudgeReference(vals[0], new int2(int.Parse(loc[0]), int.Parse(loc[1])), int.Parse(vals[2])));
                }

                return ret;
            });

            Rules = MiniYaml.NodesOrEmpty(yaml, "Rules");
            Sequences = MiniYaml.NodesOrEmpty(yaml, "Sequences");
            VoxelSequences = MiniYaml.NodesOrEmpty(yaml, "VoxelSequences");
            Weapons = MiniYaml.NodesOrEmpty(yaml, "Weapons");
            Voices = MiniYaml.NodesOrEmpty(yaml, "Voices");
            Notifications = MiniYaml.NodesOrEmpty(yaml, "Notifications");
            Translations = MiniYaml.NodesOrEmpty(yaml, "Translations");

            CustomTerrain = new string[MapSize.X, MapSize.Y];

            MapTiles = Lazy.New(() => LoadMapTiles());
            MapResources = Lazy.New(() => LoadResourceTiles());

            // The Uid is calculated from the data on-disk, so
            // format changes must be flushed to disk.
            // TODO: this isn't very nice
            if (MapFormat < 6)
                Save(path);

            Uid = ComputeHash();
        }
Example #44
0
        void SyncMultiplayerCount()
        {
            var newCount = previews.Count(p => p.Info.Name == "mpspawn");
            var mp = Players.Players.Where(p => p.Key.StartsWith("Multi")).ToList();
            foreach (var kv in mp)
            {
                var name = kv.Key;
                var index = int.Parse(name.Substring(5));

                if (index >= newCount)
                    Players.Players.Remove(name);
            }

            for (var index = 0; index < newCount; index++)
            {
                if (Players.Players.ContainsKey("Multi{0}".F(index)))
                    continue;

                var pr = new PlayerReference
                {
                    Name = "Multi{0}".F(index),
                    Faction = "Random",
                    Playable = true,
                    Enemies = new[] { "Creeps" }
                };

                Players.Players.Add(pr.Name, pr);
                worldRenderer.UpdatePalettesForPlayer(pr.Name, pr.Color, true);
            }

            var creeps = Players.Players.Keys.FirstOrDefault(p => p == "Creeps");
            if (!string.IsNullOrEmpty(creeps))
                Players.Players[creeps].Enemies = Players.Players.Keys.Where(p => !Players.Players[p].NonCombatant).ToArray();
        }
Example #45
0
 static Session.Slot MakeSlotFromPlayerReference(PlayerReference pr)
 {
     if (!pr.Playable) return null;
     return new Session.Slot
     {
         PlayerReference = pr.Name,
         Closed = false,
         AllowBots = pr.AllowBots,
         LockFaction = pr.LockFaction,
         LockColor = pr.LockColor,
         LockTeam = pr.LockTeam,
         LockSpawn = pr.LockSpawn,
         Required = pr.Required,
     };
 }
Example #46
0
        void SyncMultiplayerCount()
        {
            var newCount = previews.Count(p => p.Value.Info.Name == "mpspawn");
            var mp = Players.Players.Where(p => p.Key.StartsWith("Multi")).ToList();
            foreach (var kv in mp)
            {
                var name = kv.Key;
                var index = int.Parse(name.Substring(5));

                if (index >= newCount)
                {
                    Players.Players.Remove(name);
                    worldRenderer.World.Players.RemoveAll(pp => pp.InternalName == name);
                }
            }

            for (var index = 0; index < newCount; index++)
            {
                if (Players.Players.ContainsKey("Multi{0}".F(index)))
                    continue;

                var pr = new PlayerReference
                {
                    Name = "Multi{0}".F(index),
                    Faction = "Random",
                    Playable = true,
                    Enemies = new[] { "Creeps" }
                };

                Players.Players.Add(pr.Name, pr);
                worldRenderer.UpdatePalettesForPlayer(pr.Name, pr.Color, true);
            }
        }
Example #47
0
		static Session.Slot MakeSlotFromPlayerReference(PlayerReference pr)
		{
			if (!pr.Playable) return null;
			if (Game.Settings.Server.LockBots)
				pr.AllowBots = false;
			return new Session.Slot
			{
				PlayerReference = pr.Name,
				Closed = false,
				AllowBots = pr.AllowBots,
				LockRace = pr.LockRace,
				LockColor = pr.LockColor,
				LockTeam = pr.LockTeam,
				LockSpawn = pr.LockSpawn,
				Required = pr.Required,
			};
		}
Example #48
0
        void LoadPlayer(IniFile file, string section, bool isRA)
        {
            var c = (section == "BadGuy") ? "red" :
                        (isRA) ? "blue" : "gold";

            var color = namedColorMapping[c];

            var pr = new PlayerReference
            {
                Name = section,
                OwnsWorld = (section == "Neutral"),
                NonCombatant = (section == "Neutral"),
                Race = (isRA) ? ((section == "BadGuy") ? "soviet" : "allies") : ((section == "BadGuy") ? "nod" : "gdi"),
                Color = color.First,
                Color2 = color.Second,
            };

            var Neutral = new List<string>(){"Neutral"};
            foreach (var s in file.GetSection(section, true))
            {
                Console.WriteLine(s.Key);
                switch(s.Key)
                {
                    case "Credits":
                        pr.InitialCash = int.Parse(s.Value);
                    break;
                    case "Allies":
                        pr.Allies = s.Value.Split(',').Intersect(Players).Except(Neutral).ToArray();
                        pr.Enemies = s.Value.Split(',').SymmetricDifference(Players).Except(Neutral).ToArray();
                    break;
                }
            }

            Map.Players.Add(section, pr);
        }