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)); } }
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); }
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()); }
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); }
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); } }
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()); }
public T Get <T>() where T : ActorInit, ISingleInstanceInit { return(Dict.Get <T>()); }
public T TraitInfo <T>() where T : ITraitInfoInterface { return(traits.Get <T>()); }
public T Get <T>() where T : IActorInit { return(Dict.Get <T>()); }
public T State <T>() where T : GameState { return(m_StateDictionary.Get <T>() as T); }
public T TraitInfo <T>() where T : ITraitInfo { return(traits.Get <T>()); }