void IWorldLoaded.WorldLoaded(World w, WorldRenderer wr) { // Cache locations of veinhole actors // TODO: Add support for monitoring actors placed in the map editor! w.ActorAdded += ActorAddedToWorld; w.ActorRemoved += ActorRemovedFromWorld; foreach (var a in w.Actors) { ActorAddedToWorld(a); } veinSequence = w.Map.Rules.Sequences.GetSequence(info.Image, info.Sequence); veinPalette = wr.Palette(info.Palette); var first = veinSequence.GetSprite(0); var emptySprite = new Sprite(first.Sheet, Rectangle.Empty, TextureChannel.Alpha); spriteLayer = new TerrainSpriteLayer(w, wr, emptySprite, first.BlendMode, wr.World.Type != WorldType.Editor); // Initialize the renderIndices with the initial map state so it is visible // through the fog with the Explored Map option enabled foreach (var cell in w.Map.AllCells) { var resource = resourceLayer.GetResource(cell); var cellIndices = CalculateCellIndices(resource, cell); if (cellIndices != null) { renderIndices[cell] = cellIndices; UpdateRenderedSprite(cell, cellIndices); } } }
public RendererCellContents(RendererCellContents contents, int density) { Type = contents.Type; Density = density; Info = contents.Info; Sequence = contents.Sequence; Palette = contents.Palette; }
public RendererCellContents(string resourceType, int density, ResourceRendererInfo.ResourceTypeInfo info, ISpriteSequence sequence, PaletteReference palette) { Type = resourceType; Density = density; Info = info; Sequence = sequence; Palette = palette; }
protected void UpdateSpriteLayers(CPos cell, ISpriteSequence sequence, int frame, PaletteReference palette) { // resource.Type is meaningless (and may be null) if resource.Sequence is null if (sequence != null) { shadowLayer?.Update(cell, sequence.GetShadow(frame, WAngle.Zero), palette, 1f, 1f, sequence.IgnoreWorldTint); spriteLayer.Update(cell, sequence, palette, frame); } else { shadowLayer?.Clear(cell); spriteLayer.Clear(cell); } }
protected void UpdateSpriteLayers(CPos cell, ISpriteSequence sequence, int frame, PaletteReference palette) { foreach (var kv in spriteLayers) { // resource.Type is meaningless (and may be null) if resource.Sequence is null if (sequence != null && palette == kv.Key) { kv.Value.Update(cell, sequence, frame); } else { kv.Value.Clear(cell); } } }
public bool Tick() { // Tick the animation Animation.Animation.Tick(); // Return to the caller whether the renderable position or size has changed var visible = IsVisible; var offset = Animation.OffsetFunc?.Invoke() ?? WVec.Zero; var sequence = Animation.Animation.CurrentSequence; var updated = visible != cachedVisible || offset != cachedOffset || sequence != cachedSequence; cachedVisible = visible; cachedOffset = offset; cachedSequence = sequence; return(updated); }
public CashWidget(World world, WorldRenderer worldRenderer) { sp = world.Map.Rules.Sequences; dsp = (ISpriteSequence)sp.GetSequence("cashnums", "nums"); numsprites = new Sprite[10]; numsprites[0] = dsp.GetSprite(0); numsprites[1] = dsp.GetSprite(1); numsprites[2] = dsp.GetSprite(2); numsprites[3] = dsp.GetSprite(3); numsprites[4] = dsp.GetSprite(4); numsprites[5] = dsp.GetSprite(5); numsprites[6] = dsp.GetSprite(6); numsprites[7] = dsp.GetSprite(7); numsprites[8] = dsp.GetSprite(8); numsprites[9] = dsp.GetSprite(9); pr = worldRenderer.Palette("d2"); player = world.LocalPlayer; playerResources = player.PlayerActor.Trait <PlayerResources>(); }
static IEnumerable <IFinalizedRenderable> DrawZap(WorldRenderer wr, float2 from, float2 to, ISpriteSequence s, out float2 p, string palette) { var dist = to - from; var q = new float2(-dist.Y, dist.X); var c = -float2.Dot(from, q); var rs = new List <IFinalizedRenderable>(); var z = from; var pal = wr.Palette(palette); while ((to - z).X > 5 || (to - z).X < -5 || (to - z).Y > 5 || (to - z).Y < -5) { var step = steps.Where(t => (to - (z + new float2(t[0], t[1]))).LengthSquared < (to - z).LengthSquared) .MinBy(t => Math.Abs(float2.Dot(z + new float2(t[0], t[1]), q) + c)); var pos = wr.Position((z + new float2(step[2], step[3])).ToInt2()); rs.Add(new SpriteRenderable(s.GetSprite(step[4]), pos, WVec.Zero, 0, pal, 1f, true).PrepareRender(wr)); z += new float2(step[0], step[1]); if (rs.Count >= 1000) { break; } } p = z; return(rs); }
static IEnumerable <IFinalizedRenderable> DrawZapWandering(WorldRenderer wr, float2 from, float2 to, ISpriteSequence s, string pal) { var z = float2.Zero; /* hack */ var dist = to - from; var norm = (1f / dist.Length) * new float2(-dist.Y, dist.X); var renderables = new List <IFinalizedRenderable>(); if (Game.CosmeticRandom.Next(2) != 0) { var p1 = from + (1 / 3f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range *dist.Length / 4096 * norm; var p2 = from + (2 / 3f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range *dist.Length / 4096 * norm; renderables.AddRange(DrawZap(wr, from, p1, s, out p1, pal)); renderables.AddRange(DrawZap(wr, p1, p2, s, out p2, pal)); renderables.AddRange(DrawZap(wr, p2, to, s, out z, pal)); } else { var p1 = from + (1 / 2f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range *dist.Length / 4096 * norm; renderables.AddRange(DrawZap(wr, from, p1, s, out p1, pal)); renderables.AddRange(DrawZap(wr, p1, to, s, out z, pal)); } return(renderables); }
public void Update(CPos cell, ISpriteSequence sequence, PaletteReference palette, int frame) { Update(cell, sequence.GetSprite(frame), palette, sequence.Scale, sequence.GetAlpha(frame), sequence.IgnoreWorldTint); }
public void Update(CPos cell, ISpriteSequence sequence, int frame) { Update(cell, sequence.GetSprite(frame), sequence.IgnoreWorldTint); }
static IEnumerable<IFinalizedRenderable> DrawZapWandering(WorldRenderer wr, float2 from, float2 to, ISpriteSequence s, string pal) { var z = float2.Zero; /* hack */ var dist = to - from; var norm = (1f / dist.Length) * new float2(-dist.Y, dist.X); var renderables = new List<IFinalizedRenderable>(); if (Game.CosmeticRandom.Next(2) != 0) { var p1 = from + (1 / 3f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range * dist.Length / 4096 * norm; var p2 = from + (2 / 3f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range * dist.Length / 4096 * norm; renderables.AddRange(DrawZap(wr, from, p1, s, out p1, pal)); renderables.AddRange(DrawZap(wr, p1, p2, s, out p2, pal)); renderables.AddRange(DrawZap(wr, p2, to, s, out z, pal)); } else { var p1 = from + (1 / 2f) * dist + WRange.FromPDF(Game.CosmeticRandom, 2).Range * dist.Length / 4096 * norm; renderables.AddRange(DrawZap(wr, from, p1, s, out p1, pal)); renderables.AddRange(DrawZap(wr, p1, to, s, out z, pal)); } return renderables; }
static IEnumerable<IFinalizedRenderable> DrawZap(WorldRenderer wr, float2 from, float2 to, ISpriteSequence s, out float2 p, string palette) { var dist = to - from; var q = new float2(-dist.Y, dist.X); var c = -float2.Dot(from, q); var rs = new List<IFinalizedRenderable>(); var z = from; var pal = wr.Palette(palette); while ((to - z).X > 5 || (to - z).X < -5 || (to - z).Y > 5 || (to - z).Y < -5) { var step = steps.Where(t => (to - (z + new float2(t[0], t[1]))).LengthSquared < (to - z).LengthSquared) .MinBy(t => Math.Abs(float2.Dot(z + new float2(t[0], t[1]), q) + c)); var pos = wr.Position((z + new float2(step[2], step[3])).ToInt2()); rs.Add(new SpriteRenderable(s.GetSprite(step[4]), pos, WVec.Zero, 0, pal, 1f, true).PrepareRender(wr)); z += new float2(step[0], step[1]); if (rs.Count >= 1000) break; } p = z; return rs; }