Exemplo n.º 1
0
        public void Populate(LevelObject objectFramework)
        {
            ClearMainArea();
            objectFrameworkArea.Data.ObjectFramework = objectFramework;
            objectFrameworkArea.Data.Key.Text = objectFramework.Key;
            objectFrameworkArea.Data.Description.Text = objectFramework.Description ?? "";
            objectFrameworkArea.Data.Assets.ClearControls();
            foreach (var t in objectFramework.Assets) {
                Button<LevelObjectAsset> b = null;
                b = new Button<LevelObjectAsset>(null, 0, 0, 0, 0, (Func<string>) ( () => b.Data.Name ));
                b.Color = "rgb(50,190,90)";
                Button<LevelObjectAsset> b1 = b;
                b.Click = (p) => {
                              objectFrameworkArea.Data.b1.Toggled = false;
                              objectFrameworkArea.Data.b2.Toggled = false;
                              objectFrameworkArea.Data.b3.Toggled = false;
                              objectFrameworkArea.Data.b4.Toggled = false;
                              loadAsset(b1.Data);
                          };
                b.Data = t;
                objectFrameworkArea.Data.Assets.AddControl(b);
            }

            objectFrameworkArea.Data.Pieces.ClearControls();
            foreach (var t in objectFramework.Pieces) {
                Button<LevelObjectPiece> b = null;
                b = new Button<LevelObjectPiece>(null, 0, 0, 0, 0, (Func<string>) ( () => b.Data.Name ));

                b.Color = "rgb(50,190,90)";
                Button<LevelObjectPiece> b1 = b;
                b.Click = (p) => {
                              objectFrameworkArea.Data.b1.Toggled = false;
                              objectFrameworkArea.Data.b2.Toggled = false;
                              objectFrameworkArea.Data.b3.Toggled = false;
                              objectFrameworkArea.Data.b4.Toggled = false;
                              loadPiece(b1.Data);
                          };
                objectFrameworkArea.Data.Pieces.AddControl(b);
                b.Data = t;
            }

            objectFrameworkArea.Data.PieceLayouts.ClearControls();
            foreach (var t in objectFramework.PieceLayouts) {
                Button<LevelObjectPieceLayout> b = null;
                b = new Button<LevelObjectPieceLayout>(null, 0, 0, 0, 0, (Func<string>) ( () => b.Data.Name ));

                b.Color = "rgb(50,190,90)";
                Button<LevelObjectPieceLayout> b1 = b;
                b.Click = (p) => {
                              objectFrameworkArea.Data.b1.Toggled = false;
                              objectFrameworkArea.Data.b2.Toggled = false;
                              objectFrameworkArea.Data.b3.Toggled = false;
                              objectFrameworkArea.Data.b4.Toggled = false;
                              loadPieceLayout(b1.Data);
                          };
                objectFrameworkArea.Data.PieceLayouts.AddControl(b);
                b.Data = t;
            }

            objectFrameworkArea.Data.Projectiles.ClearControls();
            foreach (var t in objectFramework.Projectiles) {
                Button<LevelObjectProjectile> b = null;
                b = new Button<LevelObjectProjectile>(null, 0, 0, 0, 0, (Func<string>) ( () => b.Data.Name ));

                b.Color = "rgb(50,190,90)";
                Button<LevelObjectProjectile> b1 = b;
                b.Click = (p) => {
                              objectFrameworkArea.Data.b1.Toggled = false;
                              objectFrameworkArea.Data.b2.Toggled = false;
                              objectFrameworkArea.Data.b3.Toggled = false;
                              objectFrameworkArea.Data.b4.Toggled = false;
                              loadProjectile(b1.Data);
                          };
                objectFrameworkArea.Data.Projectiles.AddControl(b);
                b.Data = t;
            }
        }
Exemplo n.º 2
0
        public static LevelObject ExtendObject(LevelObjectData d)
        {
            LevelObject obj = new LevelObject(d.Key)
            {
                CollideScript = d.CollideScript,
                HurtScript = d.HurtScript,
                InitScript = d.InitScript,
                TickScript = d.TickScript
            };
            obj.Description = d.Description;
            //d.oldKey = name;
            obj.Assets = new List<LevelObjectAsset>();

            for (int i = 0; i < d.Assets.Count; i++)
            {
                var asset = d.Assets[i];
                var levelObjectAsset = new LevelObjectAsset(asset.Name)
                {
                    Name = asset.Name,
                };
                levelObjectAsset.Frames = new List<LevelObjectAssetFrame>();
                for (int index = 0; index < asset.Frames.Count; index++)
                {
                    var fr = asset.Frames[index];

                    levelObjectAsset.Frames[index] = new LevelObjectAssetFrame(fr.Name)
                    {
                        OffsetX = fr.OffsetX,
                        Width = fr.Width,
                        TransparentColor = fr.TransparentColor,
                        Height = fr.Height,
                        OffsetY = fr.OffsetY,
                        HurtSonicMap = fr.HurtSonicMap,
                        CollisionMap = fr.CollisionMap,
                        ColorMap = fr.ColorMap,
                        Palette = fr.Palette,
                    };
                }
                obj.Assets[i] = levelObjectAsset;
            }
            obj.Pieces = new List<LevelObjectPiece>();

            for (int index = 0; index < d.Pieces.Count; index++)
            {
                var piece = d.Pieces[index];
                obj.Pieces[index] = piece;
            }
            obj.PieceLayouts = new List<LevelObjectPieceLayout>();
            for (int index = 0; index < d.PieceLayouts.Count; index++)
            {
                var pl = d.PieceLayouts[index];
                obj.PieceLayouts[index] = new LevelObjectPieceLayout(pl.Name)
                {
                    Height = pl.Height,
                    Width = pl.Width
                };

                obj.PieceLayouts[index].Pieces = new List<LevelObjectPieceLayoutPiece>();
                for (int i = 0; i < d.PieceLayouts[index].Pieces.Count; i++)
                {
                    obj.PieceLayouts[index].Pieces[i] = d.PieceLayouts[index].Pieces[i];
                }
            }
            obj.Projectiles = new List<LevelObjectProjectile>();
            for (int index = 0; index < d.Projectiles.Count; index++)
            {
                var proj = d.Projectiles[index];
                proj = new LevelObjectProjectile(proj.Name)
                {
                    X = proj.X,
                    Y = proj.Y,
                    Xsp = proj.Xsp,
                    Ysp = proj.Ysp,
                    Xflip = proj.Xflip,
                    Yflip = proj.Yflip,
                    AssetIndex = proj.AssetIndex,
                    FrameIndex = proj.FrameIndex,
                };
                obj.Projectiles[index] = proj;
            }
            return obj;
        }
Exemplo n.º 3
0
        public void SetObjectData(LevelObject obj)
        {
            ObjectData = obj;

            if (ObjectData.PieceLayouts.Count > PieceLayoutIndex &&
                ObjectData.PieceLayouts[PieceLayoutIndex].Pieces.Count > 0)
                SetPieceLayoutIndex(PieceLayoutIndex);
        }
        public void DrawUI(CanvasRenderingContext2D canvas, bool showImages, int selectedPieceIndex, LevelObject levelObject)
        {
            canvas.Save();

            if (!showImages)
            {
                canvas.StrokeStyle = "#000000";
                canvas.LineWidth = 2;


                canvas.BeginPath();
                canvas.MoveTo(-1000, 0);
                canvas.LineTo(1000, 0);
                canvas.ClosePath();
                canvas.Stroke();

                canvas.BeginPath();
                canvas.MoveTo(0, -1000);
                canvas.LineTo(0, 1000);
                canvas.ClosePath();
                canvas.Stroke();
                for (var i = 1; i < Pieces.Count; i++)
                {
                    var j = Pieces[i];

                    canvas.BeginPath();
                    canvas.MoveTo(j.X, j.Y);
                    canvas.LineTo(Pieces[i - 1].X, Pieces[i - 1].Y);
                    canvas.Stroke();
                }
            }

            foreach (var levelObjectPieceLayoutPiece in Pieces)
            {
                if (showImages)
                {
                    LevelObjectPiece piece = levelObject.Pieces[levelObjectPieceLayoutPiece.PieceIndex];
                    var asset = levelObject.Assets[piece.AssetIndex];
                    if (asset.Frames.Count > 0)
                    {
                        var frm = asset.Frames[0];
                        frm.DrawUI(canvas,
                                   new Point(levelObjectPieceLayoutPiece.X - frm.OffsetX, levelObjectPieceLayoutPiece.Y - frm.OffsetY),
                                   false,
                                   false,
                                   false,
                                   false,
                                   piece.Xflip,
                                   piece.Yflip);
                    }
                }
                else
                {
                    CanvasGradient drawRadial;

                    drawRadial = SonicManager.Instance.mainCanvas.Context.CreateRadialGradient(0, 0, 0, 10, 10, 50);
                    drawRadial.AddColorStop(0, "white");
                    if (selectedPieceIndex == levelObjectPieceLayoutPiece.PieceIndex)
                        drawRadial.AddColorStop(1, "yellow");
                    else
                        drawRadial.AddColorStop(1, "red");

                    canvas.FillStyle = drawRadial;
                    canvas.BeginPath();
                    canvas.Arc(levelObjectPieceLayoutPiece.X, levelObjectPieceLayoutPiece.Y, 10, 0, Math.PI * 2, true);
                    canvas.ClosePath();
                    canvas.Fill();
                }

            }
            canvas.Restore();
        }
        public Rectangle GetRectangle(LevelObject levelObject)
        {
            int left = int.MaxValue;
            int top = int.MaxValue;
            int right = int.MinValue;
            int bottom = int.MinValue;


            foreach (var levelObjectPieceLayoutPiece in Pieces)
            {
                var piece = levelObject.Pieces[levelObjectPieceLayoutPiece.PieceIndex];
                var asset = levelObject.Assets[piece.AssetIndex];
                var frame = asset.Frames[piece.FrameIndex];
                
                var pieceX = levelObjectPieceLayoutPiece.X -  frame.OffsetX;
                var pieceY = levelObjectPieceLayoutPiece.Y -  frame.OffsetY;
                var pieceWidth = frame.Width;
                var pieceHeight = frame.Height;

                if (pieceX < left)
                {
                    left = pieceX;
                }
                if (pieceY < top)
                {
                    top = pieceY;
                }
                if (pieceX + pieceWidth > right)
                {
                    right = pieceX + pieceWidth;
                }
                if (pieceY + pieceHeight > bottom)
                {
                    bottom = pieceY + pieceHeight;
                }
            }
            return new Rectangle(left, top, right - left, bottom - top);
        }
 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);
         }
     }
 }