コード例 #1
0
        WPos PreviewPosition(World world, TypeDictionary init)
        {
            if (init.Contains <CenterPositionInit>())
            {
                return(init.Get <CenterPositionInit>().Value(world));
            }

            if (init.Contains <LocationInit>())
            {
                var cell   = init.Get <LocationInit>().Value(world);
                var offset = WVec.Zero;

                var subCellInit = actor.InitDict.GetOrDefault <SubCellInit>();
                var subCell     = subCellInit != null?subCellInit.Value(worldRenderer.World) : SubCell.Any;

                var buildingInfo = Info.TraitInfoOrDefault <BuildingInfo>();
                if (buildingInfo != null)
                {
                    offset = buildingInfo.CenterOffset(world);
                }

                return(world.Map.CenterOfSubCell(cell, subCell) + offset);
            }
            else
            {
                throw new InvalidDataException("Actor {0} must define Location or CenterPosition".F(ID));
            }
        }
コード例 #2
0
        public SequencePlaceBuildingPreviewPreview(WorldRenderer wr, ActorInfo ai, SequencePlaceBuildingPreviewInfo info, TypeDictionary init)
            : base(wr, ai, info, init)
        {
            this.info = info;
            var ownerName = init.Get <OwnerInit>().InternalName;
            var faction   = init.Get <FactionInit>().Value;

            var rsi = ai.TraitInfo <RenderSpritesInfo>();

            palette = wr.Palette(rsi.Palette ?? rsi.PlayerPalette + ownerName);
            preview = new Animation(wr.World, rsi.GetImage(ai, wr.World.Map.Rules.Sequences, faction));
            preview.PlayRepeating(info.Sequence);
        }
コード例 #3
0
        public D2kActorPreviewPlaceBuildingPreviewPreview(WorldRenderer wr, ActorInfo ai, D2kActorPreviewPlaceBuildingPreviewInfo info, TypeDictionary init)
            : base(wr, ai, info, init)
        {
            this.info = info;

            var world     = wr.World;
            var sequences = world.Map.Rules.Sequences;

            var techTree = init.Get <OwnerInit>().Value(world).PlayerActor.Trait <TechTree>();

            checkUnsafeTiles = info.RequiresPrerequisites.Any() && techTree.HasPrerequisites(info.RequiresPrerequisites);

            var validSequence = sequences.GetSequence(info.Image, info.TileValidName);

            validTile  = validSequence.GetSprite(0);
            validAlpha = validSequence.GetAlpha(0);

            var unsafeSequence = sequences.GetSequence(info.Image, info.TileUnsafeName);

            unsafeTile  = unsafeSequence.GetSprite(0);
            unsafeAlpha = unsafeSequence.GetAlpha(0);

            var blockedSequence = sequences.GetSequence(info.Image, info.TileInvalidName);

            blockedTile  = blockedSequence.GetSprite(0);
            blockedAlpha = blockedSequence.GetAlpha(0);

            var buildingInfo = ai.TraitInfo <BuildingInfo>();

            unpathableCells = new CachedTransform <CPos, List <CPos> >(topLeft => buildingInfo.OccupiedTiles(topLeft).ToList());
        }
コード例 #4
0
        public SequencePlaceBuildingPreviewPreview(WorldRenderer wr, Actor actor, ActorInfo ai, SequencePlaceBuildingPreviewInfo info, TypeDictionary init)
            : base(wr, actor, ai, info, init)
        {
            this.info  = info;
            this.actor = actor;
            var owner   = init.Get <OwnerInit>().Value(wr.World);
            var faction = init.Get <FactionInit>().Value(wr.World);

            var rsi = ai.TraitInfo <RenderSpritesInfo>();

            if (!string.IsNullOrEmpty(info.SequencePalette))
            {
                palette = wr.Palette(info.SequencePaletteIsPlayerPalette ? info.SequencePalette + owner.InternalName : info.SequencePalette);
            }
            else
            {
                palette = wr.Palette(rsi.Palette ?? rsi.PlayerPalette + owner.InternalName);
            }

            preview = new Animation(wr.World, rsi.GetImage(ai, wr.World.Map.Rules.Sequences, faction));
            preview.PlayRepeating(info.Sequence);
        }
コード例 #5
0
        public ActorPreviewPlaceBuildingPreviewPreview(WorldRenderer wr, ActorInfo ai, ActorPreviewPlaceBuildingPreviewInfo info, TypeDictionary init)
            : base(wr, ai, info, init)
        {
            this.info = info;
            var previewInit = new ActorPreviewInitializer(actorInfo, wr, init);

            preview = actorInfo.TraitInfos <IRenderActorPreviewInfo>()
                      .SelectMany(rpi => rpi.RenderPreview(previewInit))
                      .ToArray();

            if (!string.IsNullOrEmpty(info.OverridePalette))
            {
                var owner = init.Get <OwnerInit>().Value(wr.World);
                palette = wr.Palette(info.OverridePaletteIsPlayerPalette ? info.OverridePalette + owner.InternalName : info.OverridePalette);
            }
        }
コード例 #6
0
        public D2kActorPreviewPlaceBuildingPreviewPreview(WorldRenderer wr, ActorInfo ai, D2kActorPreviewPlaceBuildingPreviewInfo info, TypeDictionary init)
            : base(wr, ai, info, init)
        {
            this.info = info;

            var world     = wr.World;
            var sequences = world.Map.Rules.Sequences;

            var techTree = init.Get <OwnerInit>().Value(world).PlayerActor.Trait <TechTree>();

            checkUnsafeTiles = info.RequiresPrerequisites.Any() && techTree.HasPrerequisites(info.RequiresPrerequisites);

            buildOk      = sequences.GetSequence("overlay", "build-valid").GetSprite(0);
            buildUnsafe  = sequences.GetSequence("overlay", "build-unsafe").GetSprite(0);
            buildBlocked = sequences.GetSequence("overlay", "build-invalid").GetSprite(0);

            var buildingInfo = ai.TraitInfo <BuildingInfo>();

            unpathableCells = new CachedTransform <CPos, List <CPos> >(topLeft => buildingInfo.OccupiedTiles(topLeft).ToList());
        }
コード例 #7
0
 public T Get <T>() where T : ActorInit, ISingleInstanceInit
 {
     return(Dict.Get <T>());
 }
コード例 #8
0
 public T TraitInfo <T>() where T : ITraitInfoInterface
 {
     return(traits.Get <T>());
 }
コード例 #9
0
ファイル: ActorInitializer.cs プロジェクト: huwpascoe/OpenRA
 public T Get <T>() where T : IActorInit
 {
     return(Dict.Get <T>());
 }
コード例 #10
0
 public T State <T>() where T : GameState
 {
     return(m_StateDictionary.Get <T>() as T);
 }
コード例 #11
0
 public T TraitInfo <T>() where T : ITraitInfo
 {
     return(traits.Get <T>());
 }