Exemple #1
0
        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>();
 }
Exemple #3
0
 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];
 }
Exemple #4
0
        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)));
        }
Exemple #6
0
        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>();
        }
Exemple #9
0
        public UndergroundResourceLayer(Actor self)
        {
            world             = self.World;
            buildingInfluence = self.Trait <BuildingInfluence>();

            Content = new CellLayer <ResourceLayerContents>(world.Map);
        }
Exemple #10
0
 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");
        }
Exemple #13
0
        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);
                }
            }
        }
Exemple #14
0
        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);
            }
        }
Exemple #15
0
        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>();
        }
Exemple #16
0
 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);
 }