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 loadObjects(KeyValuePair<string, string>[] objects) { cachedObjects = new JsDictionary<string, LevelObject>(); foreach (LevelObjectInfo t in SonicLevel.Objects) { var o = t.Key; if (cachedObjects.ContainsKey(o)) { t.SetObjectData(cachedObjects[o]); continue; } var d = objects.First(p => p.Key == o); if (d.Falsey()) { t.SetObjectData(new LevelObject(o)); continue; } LevelObjectData dat; if (d.Value.Length == 0) dat = new LevelObjectData(); else dat = (LevelObjectData)Json.Parse(d.Value); var dr = ObjectManager.ExtendObject(dat); cachedObjects[o] = dr; t.SetObjectData(dr); } /* OurSonic.SonicLevels.getObjects(objectKeys, function (objects) { window.CachedObjects = []; for (l = 0; l < sonicManager.SonicLevel.Objects.length; l++) { o = sonicManager.SonicLevel.Objects[l].key; if (window.CachedObjects[o]) { sonicManager.SonicLevel.Objects[l].setObjectData(window.CachedObjects[o]); continue; } var d = JSLINQ(objects).First(function (p) { return p.key == o; }); if (!d) { sonicManager.SonicLevel.Objects[l].setObjectData(new LevelObject(o)); continue; } var dr = _H.extend(new LevelObject(""), jQuery.parseJSON(d.value)); dr = sonicManager.objectManager.extendObject(dr); for (var n = 0; n < dr.assets.length; n++) { for (var s = 0; s < dr.assets[n].frames.length; s++) { dr.assets[n].frames[s].hurtSonicMap.length = dr.assets[n].frames[s].width; dr.assets[n].frames[s].collisionMap.length = dr.assets[n].frames[s].width; for (var t = 0; t < dr.assets[n].frames[s].hurtSonicMap.length; t++) { dr.assets[n].frames[s].hurtSonicMap[t].length = dr.assets[n].frames[s].height; dr.assets[n].frames[s].collisionMap[t].length = dr.assets[n].frames[s].height; } } } window.CachedObjects[o] = dr; sonicManager.SonicLevel.Objects[l].setObjectData(dr); } }); */ }