public bool Tick(LevelObjectInfo @object, SonicLevel level, Sonic.Sonic sonic)
        {
            if (@object.lastDrawTick != SonicManager.Instance.tickCount - 1)
                Init(@object, level, sonic);

            @object.lastDrawTick = SonicManager.Instance.tickCount;

            evalMe("tickScript").Me().apply(@object, new object[] {@object, level, sonic});

            if (@object.State.Truthy()) {
                @object.Xsp = @object.State.Xsp;
                @object.Ysp = @object.State.Ysp;
            }
            @object.X += @object.Xsp;
            @object.Y += @object.Ysp;
            return true;
        }
        public bool Tick(LevelObjectInfo @object, SonicLevel level, Sonic.Sonic sonic)
        {
            if (Dead || ObjectData.Falsey()) return false;

            try {
                return ObjectData.Tick(@object, level, sonic);
            } catch (Exception EJ) {
                Log(EJ.Message, 0);

                return false;
            }
        }
 public void Draw(CanvasRenderingContext2D canvas, int x, int y, LevelObject framework, LevelObjectInfo instance, bool showHeightMap)
 {
     foreach (var j in instance.Pieces)
     {
         if (!j.Visible) continue;
         var piece = framework.Pieces[j.PieceIndex];
         var asset = framework.Assets[piece.AssetIndex];
         if (asset.Frames.Count > 0)
         {
             var frm = asset.Frames[j.FrameIndex];
             frm.DrawUI(canvas,
                        new Point((x /*+ j.X*/) - (frm.OffsetX), (y /*+ j.Y*/) - (frm.OffsetY)),
                 //                               new Point(frm.Width, frm.Height),
                        false,
                        showHeightMap,
                        showHeightMap,
                        false,
                        instance.Xflip ^ piece.Xflip,
                        instance.Yflip ^ piece.Yflip);
         }
     }
 }
 public bool OnHurtSonic(LevelObjectInfo @object, SonicLevel level, Sonic.Sonic sonic, string sensor, dynamic piece)
 {
     return Script.Reinterpret<bool>(evalMe("hurtScript").Me().apply(@object, new object[] {@object, level, sonic, sensor, piece}));
 }
 public void Init(LevelObjectInfo @object, SonicLevel level, Sonic.Sonic sonic)
 {
     @object.Reset();
     evalMe("initScript").Me().apply(@object, new object[] {@object, level, sonic});
 }