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; } }
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; }
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); } } }