コード例 #1
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);
            }
        }
コード例 #2
0
            public VariantWrapper(WorldRenderer wr, ProductionQueue queue, ActorInfo ai)
            {
                ActorInfo     = ai;
                BuildingInfo  = ActorInfo.TraitInfo <BuildingInfo>();
                PlugInfo      = ActorInfo.TraitInfoOrDefault <PlugInfo>();
                LineBuildInfo = ActorInfo.TraitInfoOrDefault <LineBuildInfo>();

                var previewGeneratorInfo = ActorInfo.TraitInfoOrDefault <IPlaceBuildingPreviewGeneratorInfo>();

                if (previewGeneratorInfo != null)
                {
                    string faction;
                    var    buildableInfo = ActorInfo.TraitInfoOrDefault <BuildableInfo>();
                    if (buildableInfo != null && buildableInfo.ForceFaction != null)
                    {
                        faction = buildableInfo.ForceFaction;
                    }
                    else
                    {
                        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(wr, ActorInfo, td);
                }
            }