public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { var anim = new Animation(init.World, image, () => 0); anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence), () => 0); var bi = init.Actor.TraitInfo <BuildingInfo>(); var offset = FootprintUtils.CenterOffset(init.World, bi).Y + 512; // Additional 512 units move from center -> top of cell yield return(new SpriteActorPreview(anim, WVec.Zero, offset, p, rs.Scale)); }
public override void PrepareRenderables() { var voxel = GetVoxel(); var palette = GetPalette(); var playerPalette = GetPlayerPalette(); var normalsPalette = GetNormalsPalette(); var shadowPalette = GetShadowPalette(); var scale = GetScale(); var lightAmbientColor = GetLightAmbientColor(); var lightDiffuseColor = GetLightDiffuseColor(); var lightPitch = GetLightPitch(); var lightYaw = GetLightYaw(); if (voxel == null || palette == null) { return; } if (voxel != cachedVoxel) { offset = 0.5f * (new float2(RenderBounds.Size) - new float2(voxel.Size[0], voxel.Size[1])); cachedVoxel = voxel; } if (palette != cachedPalette) { if (string.IsNullOrEmpty(palette) && string.IsNullOrEmpty(playerPalette)) { return; } string paletteName = string.IsNullOrEmpty(palette) ? playerPalette : palette; pr = WorldRenderer.Palette(paletteName); cachedPalette = paletteName; } if (playerPalette != cachedPlayerPalette) { prPlayer = WorldRenderer.Palette(playerPalette); cachedPlayerPalette = playerPalette; } if (normalsPalette != cachedNormalsPalette) { prNormals = WorldRenderer.Palette(normalsPalette); cachedNormalsPalette = normalsPalette; } if (shadowPalette != cachedShadowPalette) { prShadow = WorldRenderer.Palette(shadowPalette); cachedShadowPalette = shadowPalette; } if (scale != cachedScale) { //offset *= scale; cachedScale = scale; } if (lightPitch != cachedLightPitch) { cachedLightPitch = lightPitch; } if (lightYaw != cachedLightYaw) { cachedLightYaw = lightYaw; } if (cachedLightAmbientColor[0] != lightAmbientColor[0] || cachedLightAmbientColor[1] != lightAmbientColor[1] || cachedLightAmbientColor[2] != lightAmbientColor[2]) { cachedLightAmbientColor = lightAmbientColor; } if (cachedLightDiffuseColor[0] != lightDiffuseColor[0] || cachedLightDiffuseColor[1] != lightDiffuseColor[1] || cachedLightDiffuseColor[2] != lightDiffuseColor[2]) { cachedLightDiffuseColor = lightDiffuseColor; } if (cachedVoxel == null) { return; } var size = new float2(cachedVoxel.Size[0] * cachedScale, cachedVoxel.Size[1] * cachedScale); ModelAnimation animation = new ModelAnimation( cachedVoxel, () => WVec.Zero, () => new List <WRot>() { new WRot( new WAngle(-45), new WAngle(-30), new WAngle(360) ) }, () => false, () => 0, true); ModelPreview preview = new ModelPreview( new ModelAnimation[] { animation }, WVec.Zero, 0, cachedScale, new WAngle(cachedLightPitch), new WAngle(cachedLightYaw), cachedLightAmbientColor, cachedLightDiffuseColor, new WAngle(), pr, prNormals, prShadow); List <ModelPreview> previews = new List <ModelPreview>() { preview }; // Calculate the preview bounds PreviewOffset = int2.Zero; IdealPreviewSize = int2.Zero; var rs = previews.SelectMany(p => ((IActorPreview)p).ScreenBounds(WorldRenderer, WPos.Zero)); if (rs.Any()) { var b = rs.First(); foreach (var rr in rs.Skip(1)) { b = OpenRA.Primitives.Rectangle.Union(b, rr); } IdealPreviewSize = new int2(b.Width, b.Height); PreviewOffset = -new int2(b.Left, b.Top) - IdealPreviewSize / 2; } renderables = previews .SelectMany(p => ((IActorPreview)p).Render(WorldRenderer, WPos.Zero)) .OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey) .Select(r => r.PrepareRender(WorldRenderer)) .ToArray(); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } if (Palette != null) { p = init.WorldRenderer.Palette(Palette); } Func <WAngle> facing; var dynamicfacingInit = init.GetOrDefault <DynamicFacingInit>(this); if (dynamicfacingInit != null) { facing = dynamicfacingInit.Value; } else { var f = init.GetValue <FacingInit, WAngle>(this, WAngle.Zero); facing = () => f; } var anim = new Animation(init.World, image, facing); anim.IsDecoration = IsDecoration; anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); var body = init.Actor.TraitInfo <BodyOrientationInfo>(); Func <WRot> orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings); Func <WVec> offset = () => body.LocalToWorld(Offset.Rotate(orientation())); Func <int> zOffset = () => { var tmpOffset = offset(); return(tmpOffset.Y + tmpOffset.Z + 1); }; yield return(new SpriteActorPreview(anim, offset, zOffset, p)); }
public override IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var t = init.Actor.TraitInfos <TurretedInfo>().FirstOrDefault(); var wsb = init.Actor.TraitInfos <WithSpriteBodyInfo>().FirstOrDefault(); // Show the correct turret facing var facing = init.Contains <TurretFacingInit>() ? init.Get <TurretFacingInit>().Value(init.World) : t.InitialFacing; var anim = new Animation(init.World, image, () => facing); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), wsb.Sequence)); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(new DetectionCircleRenderable(centerPosition, radius, zOffset, trailCount, trailSeparation, trailAngle, color, contrastColor)); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var anim = new Animation(init.World, image, init.GetFacing()); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), StandSequences.First())); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale)); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { var body = init.Actor.Traits.Get <BodyOrientationInfo>(); var armament = init.Actor.Traits.WithInterface <ArmamentInfo>() .First(a => a.Name == Armament); var t = init.Actor.Traits.WithInterface <TurretedInfo>() .First(tt => tt.Turret == armament.Turret); var anim = new Animation(init.World, image, () => t.InitialFacing); anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); var turretOrientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(t.InitialFacing)), facings); var turretOffset = body.LocalToWorld(t.Offset.Rotate(turretOrientation)); yield return(new SpriteActorPreview(anim, turretOffset, turretOffset.Y + turretOffset.Z, p, rs.Scale)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(new TextRenderable(font, pos, zOffset, color, text)); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var body = init.Actor.TraitInfo <BodyOrientationInfo>(); var armament = init.Actor.TraitInfos <ArmamentInfo>() .First(a => a.Name == Armament); var t = init.Actor.TraitInfos <TurretedInfo>() .First(tt => tt.Turret == armament.Turret); var turretFacing = Turreted.TurretFacingFromInit(init, t.InitialFacing, armament.Turret); var anim = new Animation(init.World, image, turretFacing); anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); Func <int> facing = init.GetFacing(); Func <WRot> orientation = () => body.QuantizeOrientation(WRot.FromFacing(facing()), facings); Func <WVec> turretOffset = () => body.LocalToWorld(t.Offset.Rotate(orientation())); Func <int> zOffset = () => { var tmpOffset = turretOffset(); return(-(tmpOffset.Y + tmpOffset.Z) + 1); }; yield return(new SpriteActorPreview(anim, turretOffset, zOffset, p, rs.Scale)); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (Palette != null) { p = init.WorldRenderer.Palette(Palette); } var bi = init.Actor.TraitInfo <BuildingInfo>(); var cols = bi.Dimensions.X; var rows = bi.Dimensions.Y; for (var index = 0; index < (cols * rows); index++) { if (SkipFrames == null || !SkipFrames.Contains(index)) { var y = index / cols; var x = index % cols; var anim = new Animation(init.World, image); Func <WVec> offset = () => new WVec(x * 1024 - 512, y * 1024 - 512, 0); Func <int> zOffset = () => 0; var frameIndex = index; anim.PlayFetchIndex(Sequence, () => frameIndex); anim.IsDecoration = true; yield return(new SpriteActorPreview(anim, offset, zOffset, p, rs.Scale)); } } }
public override IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var anim = new Animation(init.World, image); anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequences.First()), () => 0); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p)); }
public IEnumerable <ModelAnimation> RenderPreviewVoxels( ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var body = init.Actor.TraitInfo <BodyOrientationInfo>(); var t = init.Actor.TraitInfos <TurretedInfo>() .First(tt => tt.Turret == Turret); var model = init.World.ModelCache.GetModelSequence(image, Sequence); Func <WVec> turretOffset = () => body.LocalToWorld(t.Offset.Rotate(orientation())); var turretFacing = Turreted.TurretFacingFromInit(init, t.InitialFacing, Turret); Func <WRot> turretBodyOrientation = () => WRot.FromYaw(WAngle.FromFacing(turretFacing()) - orientation().Yaw); yield return(new ModelAnimation(model, turretOffset, () => new[] { turretBodyOrientation(), body.QuantizeOrientation(orientation(), facings) }, () => false, () => 0, ShowShadow)); }
public override IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, string image, int facings, PaletteReference p) { if (!EnabledByDefault) { yield break; } var anim = new Animation(init.World, image); var sequence = init.World.Type == WorldType.Editor ? EditorSequence : Sequence; var palette = init.World.Type == WorldType.Editor ? init.WorldRenderer.Palette(EditorPalette) : p; anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), sequence), () => 0); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, palette)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(new ArcRenderable(a, b, zOffset, angle, color, width, segments)); }
public SpriteActorPreview(Animation animation, Func <WVec> offset, Func <int> zOffset, PaletteReference pr, float scale) { this.animation = animation; this.offset = offset; this.zOffset = zOffset; this.pr = pr; this.scale = scale; }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (init.Contains <HideBibPreviewInit>() && init.Get <HideBibPreviewInit, bool>()) { yield break; } if (Palette != null) { p = init.WorldRenderer.Palette(Palette); } var bi = init.Actor.TraitInfo <BuildingInfo>(); var rows = HasMinibib ? 1 : 2; var width = bi.Dimensions.X; var bibOffset = bi.Dimensions.Y - rows; var centerOffset = bi.CenterOffset(init.World); var map = init.World.Map; var location = CPos.Zero; if (init.Contains <LocationInit>()) { location = init.Get <LocationInit, CPos>(); } for (var i = 0; i < rows * width; i++) { var index = i; var anim = new Animation(init.World, image); var cellOffset = new CVec(i % width, i / width + bibOffset); var cell = location + cellOffset; // Some mods may define terrain-specific bibs var terrain = map.GetTerrainInfo(cell).Type; var testSequence = Sequence + "-" + terrain; var sequence = anim.HasSequence(testSequence) ? testSequence : Sequence; anim.PlayFetchIndex(sequence, () => index); anim.IsDecoration = true; // Z-order is one set to the top of the footprint var offset = map.CenterOfCell(cell) - map.CenterOfCell(location) - centerOffset; yield return(new SpriteActorPreview(anim, () => offset, () => - (offset.Y + centerOffset.Y + 512), p, rs.Scale)); } }
public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p) { var body = init.Actor.Traits.Get <BodyOrientationInfo>(); var armament = init.Actor.Traits.WithInterface <ArmamentInfo>() .First(a => a.Name == Armament); var t = init.Actor.Traits.WithInterface <TurretedInfo>() .First(tt => tt.Turret == armament.Turret); var voxel = VoxelProvider.GetVoxel(image, Sequence); var turretFacing = init.Contains <TurretFacingInit>() ? init.Get <TurretFacingInit, int>() : t.InitialFacing; var turretOrientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw), facings); var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation)); yield return(new VoxelAnimation(voxel, () => turretOffset, () => new[] { turretOrientation, orientation }, () => false, () => 0)); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { if (UpgradeMinEnabledLevel > 0) { yield break; } if (Palette != null) { p = init.WorldRenderer.Palette(Palette); } var body = init.Actor.Traits.Get <BodyOrientationInfo>(); var facing = init.Contains <FacingInit>() ? init.Get <FacingInit, int>() : 0; var anim = new Animation(init.World, image, () => facing); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); var orientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(facing)), facings); var offset = body.LocalToWorld(Offset.Rotate(orientation)); yield return(new SpriteActorPreview(anim, offset, offset.Y + offset.Z + 1, p, rs.Scale)); }
public void CachePalette(WorldRenderer wr, Player owner) { PaletteReference = wr.Palette(IsPlayerPalette ? Palette + owner.InternalName : Palette); }
public override IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { var adjacent = 0; if (init.Contains <RuntimeNeighbourInit>()) { var location = CPos.Zero; if (init.Contains <LocationInit>()) { location = init.Get <LocationInit, CPos>(); } var neighbours = init.Get <RuntimeNeighbourInit, Dictionary <CPos, string[]> >(); foreach (var kv in neighbours) { var haveNeighbour = false; foreach (var n in kv.Value) { var rb = init.World.Map.Rules.Actors[n].TraitInfos <IWallConnectorInfo>().FirstEnabledTraitOrDefault(); if (rb != null && rb.GetWallConnectionType() == Type) { haveNeighbour = true; break; } } if (!haveNeighbour) { continue; } if (kv.Key == location + new CVec(0, -1)) { adjacent |= 1; } else if (kv.Key == location + new CVec(+1, 0)) { adjacent |= 2; } else if (kv.Key == location + new CVec(0, +1)) { adjacent |= 4; } else if (kv.Key == location + new CVec(-1, 0)) { adjacent |= 8; } } } var anim = new Animation(init.World, image, () => 0); anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence), () => adjacent); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(new ContrailRenderable(world, (WPos[])trail.Clone(), width, next, length, skip, color, zOffset)); }
IRenderable[] TemplateRenderables(WorldRenderer wr, PaletteReference palette, ushort template) { return(footprint.Select(c => (IRenderable)(new SpriteRenderable( wr.Theater.TileSprite(new TileReference <ushort, byte>(template, c.Value)), c.Key.CenterPosition, WVec.Zero, -512, palette, 1f, true))).ToArray()); }
public IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { var anim = new Animation(init.World, image); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), GrowthSequences[0])); yield return(new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(this); }
public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p) { if (UpgradeMinEnabledLevel > 0) { yield break; } var body = init.Actor.TraitInfo <BodyOrientationInfo>(); var t = init.Actor.TraitInfos <TurretedInfo>() .First(tt => tt.Turret == Turret); var voxel = VoxelProvider.GetVoxel(image, Sequence); var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation)); var turretFacing = Turreted.GetInitialTurretFacing(init, t.InitialFacing, Turret); var turretBodyOrientation = new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw); var turretOrientation = new[] { turretBodyOrientation, body.QuantizeOrientation(orientation, facings) }; yield return(new VoxelAnimation(voxel, () => turretOffset, () => turretOrientation, () => false, () => 0)); }
public IRenderable WithPalette(PaletteReference newPalette) { return(new BeamRenderable(pos, zOffset, length, width, color)); }
public IEnumerable <ModelAnimation> RenderPreviewVoxels( ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p) { var model = init.World.ModelCache.GetModelSequence(image, Sequence); var body = init.Actor.TraitInfo <BodyOrientationInfo>(); var frame = init.Contains <BodyAnimationFrameInit>() ? init.Get <BodyAnimationFrameInit, uint>() : 0; yield return(new ModelAnimation(model, () => WVec.Zero, () => new[] { body.QuantizeOrientation(orientation(), facings) }, () => false, () => frame, ShowShadow)); }
public IEnumerable <VoxelAnimation> RenderPreviewVoxels( ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p) { var body = init.Actor.TraitInfo <BodyOrientationInfo>(); var voxel = VoxelProvider.GetVoxel(image, "idle"); yield return(new VoxelAnimation(voxel, () => WVec.Zero, () => new[] { body.QuantizeOrientation(orientation(), facings) }, () => false, () => 0)); }
public virtual IEnumerable <IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { var ifacing = init.Actor.Traits.GetOrDefault <IFacingInfo>(); var facing = ifacing != null?init.Contains <FacingInit>() ? init.Get <FacingInit, int>() : ifacing.GetInitialFacing() : 0; var anim = new Animation(init.World, image, () => facing); anim.PlayRepeating("idle"); yield return(new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale)); }
public void WorldLoaded(World w, WorldRenderer wr) { Palette = wr.Palette(Info.Palette); }