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) }); }
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; } }
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; }
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; }
public void PlayerReferenceCanBeRenamed() { PlayerReference playerReference = tournament.RegisterPlayerReference("Maru"); playerReference.RenameTo("Idra"); playerReference.Name.Should().Be("Idra"); }
public void PlayerReferenceCannotBeRenamedToEmptyName() { PlayerReference playerReference = tournament.RegisterPlayerReference("Maru"); playerReference.RenameTo(""); playerReference.Name.Should().Be("Maru"); }
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); }
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; }
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); }
public bool RenamePlayerReferenceInTournament(PlayerReference playerReference, string name) { if (playerReference != null) { return(playerReference.RenameTo(name)); } return(false); }
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(); }
void Start() { defaultPos = transform.localPosition; defaultRot = transform.localEulerAngles; PlayerReference pr = GeneralVariables.playerRef; pm = pr.GetComponent <PlayerMovement>(); ac = pr.ac; }
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); }
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); }
void Start() { tr = transform; pTr = tr.parent; PlayerReference pr = GeneralVariables.playerRef; pm = pr.GetComponent <PlayerMovement>(); pv = pr.GetComponent <PlayerVitals>(); ac = pr.ac; }
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); } }
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); }
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); }
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); }
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 }); }
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); }
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); }
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(); }
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); }
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); }
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); }
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; }
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; } }
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); }
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; }
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); }
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); } }
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(); }
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) }); }
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); } }
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(); }
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 ) }); }
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()); }
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() }); }
// 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(); }
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(); }
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, }; }
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); } }
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, }; }
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); }