예제 #1
0
        public PlaceBuildingOrderGenerator(ProductionQueue queue, string name, WorldRenderer worldRenderer)
        {
            Queue             = queue;
            world             = queue.Actor.World;
            placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>();
            resourceLayer     = world.WorldActor.TraitOrDefault <IResourceLayer>();
            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();
        }
예제 #2
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>();
        }
예제 #3
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)
        {
            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>();
        }
예제 #5
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);
            }
        }
        public BuilderUnitBuildingOrderGenerator(BuilderUnit queue, string name, WorldRenderer worldRenderer)
        {
            var world = queue.Actor.World;

            this.queue        = queue;
            viewport          = worldRenderer.Viewport;
            placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo <PlaceBuildingInfo>();

            // 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();

            actorInfo = map.Rules.Actors[name];
            footprintPlaceBuildingPreviewInfo = actorInfo.TraitInfo <FootprintPlaceBuildingPreviewInfo>();
            buildingInfo        = actorInfo.TraitInfo <BuildingInfo>();
            centerOffset        = buildingInfo.CenterOffset(world);
            topLeftScreenOffset = -worldRenderer.ScreenPxOffset(centerOffset);

            var buildableInfo      = actorInfo.TraitInfo <BuildableInfo>();
            var mostLikelyProducer = queue.MostLikelyProducer();

            faction = buildableInfo.ForceFaction
                      ?? (mostLikelyProducer.Trait != null ? mostLikelyProducer.Trait.Faction : queue.Actor.Owner.Faction.InternalName);

            if (map.Rules.Sequences.HasSequence("overlay", "build-valid-{0}".F(tileset)))
            {
                buildOk = map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0);
            }
            else
            {
                buildOk = map.Rules.Sequences.GetSequence("overlay", "build-valid").GetSprite(0);
            }
            buildBlocked = map.Rules.Sequences.GetSequence("overlay", "build-invalid").GetSprite(0);
        }