public PlaceBuildingOrderGenerator(ProductionQueue queue, string name) { var world = queue.Actor.World; this.queue = queue; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>(); building = name; // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) { world.Selection.Clear(); } var map = world.Map; var tileset = world.Map.Tileset.ToLowerInvariant(); var info = map.Rules.Actors[building]; buildingInfo = info.TraitInfo <BuildingInfo>(); var buildableInfo = info.TraitInfo <BuildableInfo>(); var mostLikelyProducer = queue.MostLikelyProducer(); faction = buildableInfo.ForceFaction ?? (mostLikelyProducer.Trait != null ? mostLikelyProducer.Trait.Faction : queue.Actor.Owner.Faction.InternalName); buildOk = map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0); buildBlocked = map.Rules.Sequences.GetSequence("overlay", "build-invalid").GetSprite(0); buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); }
void INotifyCreated.Created(Actor self) { health = self.TraitOrDefault <IHealth>(); layer = self.World.WorldActor.TraitOrDefault <BuildableTerrainLayer>(); bi = self.World.WorldActor.Trait <BuildingInfluence>(); techTree = self.Owner.PlayerActor.TraitOrDefault <TechTree>(); }
public LaysTerrain(Actor self, LaysTerrainInfo info) { this.info = info; layer = self.World.WorldActor.Trait <BuildableTerrainLayer>(); bi = self.World.WorldActor.Trait <BuildingInfluence>(); template = self.World.TileSet.Templates[info.Template]; }
public PlaceBuildingOrderGenerator(ProductionQueue queue, string name, WorldRenderer worldRenderer) { var world = queue.Actor.World; this.queue = queue; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>(); buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); resourceLayer = world.WorldActor.TraitOrDefault <ResourceLayer>(); viewport = worldRenderer.Viewport; // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) { world.Selection.Clear(); } var variants = new List <VariantWrapper>() { new VariantWrapper(worldRenderer, queue, world.Map.Rules.Actors[name]) }; foreach (var v in variants[0].ActorInfo.TraitInfos <PlaceBuildingVariantsInfo>()) { foreach (var a in v.Actors) { variants.Add(new VariantWrapper(worldRenderer, queue, world.Map.Rules.Actors[a])); } } this.variants = variants.ToArray(); }
protected override bool AllowResourceAt(string resourceType, CPos cell) { if (!Map.Contains(cell)) { return(false); } // Resources are allowed on flat terrain and cardinal slopes if (Map.Ramp[cell] > 4) { return(false); } if (!info.ResourceTypes.TryGetValue(resourceType, out var resourceInfo)) { return(false); } if (!resourceInfo.AllowedTerrainTypes.Contains(Map.GetTerrainInfo(cell).Type)) { return(false); } // Ensure there is space for the vein border tiles (not needed on ramps) var check = resourceType == info.VeinType ? (Func <CPos, CPos, bool>)IsValidVeinNeighbour : IsValidResourceNeighbour; var blockedByNeighbours = Map.Ramp[cell] == 0 && !Common.Util.ExpandFootprint(cell, false).All(c => check(cell, c)); return(!blockedByNeighbours && (resourceType == info.VeinType || !BuildingInfluence.AnyBuildingAt(cell))); }
public PlaceBuildingOrderGenerator(ProductionQueue queue, string name, WorldRenderer worldRenderer) { var world = queue.Actor.World; this.queue = queue; viewport = worldRenderer.ViewPort; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>(); building = name; if (WarGame.Settings.Game.UseClassicMouseStyle) { world.Selection.Clear(); } var map = world.Map; var tileset = world.Map.Tileset.ToLowerInvariant(); var info = map.Rules.Actors[building]; buildingInfo = info.TraitInfo <BuildingInfo>(); centerOffset = buildingInfo.CenterOffset(world); topLeftScreenOffset = -worldRenderer.ScreenPxOffset(centerOffset); var buildableInfo = info.TraitInfo <BuildableInfo>(); var mostLikelyProducer = queue.MostLikelyProducer(); faction = buildableInfo.ForceFaction ?? (mostLikelyProducer.Trait != null ? mostLikelyProducer.Trait.Faction : queue.Actor.Owner.Faction.InternalName); buildOk = map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0); buildBlocked = map.Rules.Sequences.GetSequence("overlay", "build-invalid").GetSprite(0); buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); }
public PlaceBuildingOrderGenerator(ProductionQueue queue, string name) { var world = queue.Actor.World; this.queue = queue; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo<PlaceBuildingInfo>(); building = name; // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) world.Selection.Clear(); var map = world.Map; var tileset = world.Map.Tileset.ToLowerInvariant(); var info = map.Rules.Actors[building]; buildingInfo = info.TraitInfo<BuildingInfo>(); var buildableInfo = info.TraitInfo<BuildableInfo>(); var mostLikelyProducer = queue.MostLikelyProducer(); faction = buildableInfo.ForceFaction ?? (mostLikelyProducer.Trait != null ? mostLikelyProducer.Trait.Faction : queue.Actor.Owner.Faction.InternalName); buildOk = map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0); buildBlocked = map.Rules.Sequences.GetSequence("overlay", "build-invalid").GetSprite(0); buildingInfluence = world.WorldActor.Trait<BuildingInfluence>(); }
public PlaceBuildingOrderGenerator(ProductionQueue queue, string name) { producer = queue.Actor; placeBuildingInfo = producer.Owner.PlayerActor.Info.Traits.Get <PlaceBuildingInfo>(); building = name; // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) { producer.World.Selection.Clear(); } var map = producer.World.Map; var tileset = producer.World.TileSet.Id.ToLowerInvariant(); var info = map.Rules.Actors[building]; buildingInfo = info.Traits.Get <BuildingInfo>(); var buildableInfo = info.Traits.Get <BuildableInfo>(); race = buildableInfo.ForceRace ?? queue.MostLikelyProducer().Trait.Race; buildOk = map.SequenceProvider.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0); buildBlocked = map.SequenceProvider.GetSequence("overlay", "build-invalid").GetSprite(0); buildingInfluence = producer.World.WorldActor.Trait <BuildingInfluence>(); }
public UndergroundResourceLayer(Actor self) { world = self.World; buildingInfluence = self.Trait <BuildingInfluence>(); Content = new CellLayer <ResourceLayerContents>(world.Map); }
public LaysTerrain(Actor self, LaysTerrainInfo info) : base(info) { layer = self.World.WorldActor.Trait <BuildableTerrainLayer>(); bi = self.World.WorldActor.Trait <BuildingInfluence>(); template = self.World.Map.Rules.TileSet.Templates[info.Template]; buildingInfo = self.Info.TraitInfo <BuildingInfo>(); }
public D2LaysTerrain(Actor self, D2LaysTerrainInfo info) { this.info = info; layer = self.World.WorldActor.Trait <D2BuildableTerrainLayer>(); bi = self.World.WorldActor.Trait <BuildingInfluence>(); template = self.World.Map.Rules.TileSet.Templates[info.Template]; buildingInfo = self.Info.TraitInfo <BuildingInfo>(); }
public void WorldLoaded(World w, WorldRenderer wr) { theater = wr.Theater; bi = w.WorldActor.Trait <BuildingInfluence>(); Sheet2D sh; if (string.IsNullOrEmpty(theater.tileset.MegaTexture)) { sh = theater.Sheet; } else { sh = theater.sbMegaTexture.Current; } render = new TerrainSpriteLayer(w, wr, sh, BlendMode.Alpha, wr.Palette(info.Palette), wr.World.Type != WorldType.Editor, "BuildableTerrainLayer"); }
public void WorldLoaded(World w, WorldRenderer wr) { this.world = w; buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); content = new CellLayer <CellContents>(w.Map); render = new CellLayer <CellContents>(w.Map); dirty = new List <CPos>(); var resources = w.WorldActor.TraitsImplementing <ResourceType>() .ToDictionary(r => r.Info.ResourceType, r => r); foreach (var cell in w.Map.Cells) { ResourceType t; if (!resources.TryGetValue(w.Map.MapResources.Value[cell].Type, out t)) { continue; } if (!AllowResourceAt(t, cell)) { continue; } content[cell] = CreateResourceCell(t, cell); } // Set initial density based on the number of neighboring resources foreach (var cell in w.Map.Cells) { var type = content[cell].Type; if (type != null) { // Adjacent includes the current cell, so is always >= 1 var adjacent = GetAdjacentCellsWith(type, cell); var density = int2.Lerp(0, type.Info.MaxDensity, adjacent, 9); var temp = content[cell]; temp.Density = Math.Max(density, 1); render[cell] = content[cell] = temp; UpdateRenderedSprite(cell); } } }
public PlaceBuildingOrderGenerator(ProductionQueue queue, string name, WorldRenderer worldRenderer) { var world = queue.Actor.World; this.queue = queue; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>(); buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); viewport = worldRenderer.Viewport; // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) { world.Selection.Clear(); } actorInfo = world.Map.Rules.Actors[name]; buildingInfo = actorInfo.TraitInfo <BuildingInfo>(); var previewGeneratorInfo = actorInfo.TraitInfoOrDefault <IPlaceBuildingPreviewGeneratorInfo>(); if (previewGeneratorInfo != null) { var faction = actorInfo.TraitInfo <BuildableInfo>().ForceFaction; if (faction == null) { var mostLikelyProducer = queue.MostLikelyProducer(); faction = mostLikelyProducer.Trait != null ? mostLikelyProducer.Trait.Faction : queue.Actor.Owner.Faction.InternalName; } var td = new TypeDictionary() { new FactionInit(faction), new OwnerInit(queue.Actor.Owner), }; foreach (var api in actorInfo.TraitInfos <IActorPreviewInitInfo>()) { foreach (var o in api.ActorPreviewInits(actorInfo, ActorPreviewType.PlaceBuilding)) { td.Add(o); } } preview = previewGeneratorInfo.CreatePreview(worldRenderer, queue.Actor, actorInfo, td); } }
public CustomBaseBuilderQueueManager(CustomBaseBuilderBotModule baseBuilder, string category, Player player, PowerManager powerManager, PlayerResources playerResources, IResourceLayer resourceLayer) { this.baseBuilder = baseBuilder; world = player.World; this.player = player; this.powerManager = powerManager; this.playerResources = playerResources; this.resourceLayer = resourceLayer; this.category = category; failRetryTicks = baseBuilder.Info.StructureProductionResumeDelay; minimumExcessPower = baseBuilder.Info.MinimumExcessPower; if (!baseBuilder.Info.NavalProductionTypes.Any()) { waterState = WaterCheck.DontCheck; } buildingInfluence = world.WorldActor.Trait <BuildingInfluence>(); }
public void WorldLoaded(World w, WorldRenderer wr) { theater = wr.Theater; bi = w.WorldActor.Trait <BuildingInfluence>(); render = new TerrainSpriteLayer(w, wr, theater.Sheet, BlendMode.Alpha, wr.Palette(info.Palette), wr.World.Type != WorldType.Editor); }