Пример #1
0
        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);
                }
            }
        }
Пример #2
0
 public RendererCellContents(RendererCellContents contents, int density)
 {
     Type     = contents.Type;
     Density  = density;
     Info     = contents.Info;
     Sequence = contents.Sequence;
     Palette  = contents.Palette;
 }
Пример #3
0
 public RendererCellContents(string resourceType, int density, ResourceRendererInfo.ResourceTypeInfo info, ISpriteSequence sequence, PaletteReference palette)
 {
     Type     = resourceType;
     Density  = density;
     Info     = info;
     Sequence = sequence;
     Palette  = palette;
 }
Пример #4
0
 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);
     }
 }
Пример #5
0
 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);
         }
     }
 }
Пример #6
0
            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);
            }
Пример #7
0
        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>();
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
 public void Update(CPos cell, ISpriteSequence sequence, PaletteReference palette, int frame)
 {
     Update(cell, sequence.GetSprite(frame), palette, sequence.Scale, sequence.GetAlpha(frame), sequence.IgnoreWorldTint);
 }
Пример #11
0
 public void Update(CPos cell, ISpriteSequence sequence, int frame)
 {
     Update(cell, sequence.GetSprite(frame), sequence.IgnoreWorldTint);
 }
Пример #12
0
        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;
        }
Пример #13
0
        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;
        }