/// <summary> /// Adds a part to the appropriate list for its type; returns the part. /// </summary> public Part Add(Part part) { switch (part) { case Part.MapPiece p: MapPieces.Add(p); break; case Part.Object p: Objects.Add(p); break; case Part.Enemy p: Enemies.Add(p); break; case Part.Player p: Players.Add(p); break; case Part.Collision p: Collisions.Add(p); break; case Part.Protoboss p: Protobosses.Add(p); break; case Part.Navmesh p: Navmeshes.Add(p); break; case Part.DummyObject p: DummyObjects.Add(p); break; case Part.DummyEnemy p: DummyEnemies.Add(p); break; case Part.ConnectCollision p: ConnectCollisions.Add(p); break; default: throw new ArgumentException($"Unrecognized type {part.GetType()}.", nameof(part)); } return(part); }
internal override Part ReadEntry(BinaryReaderEx br) { PartType type = br.GetEnum32 <PartType>(br.Position + 4); switch (type) { case PartType.MapPiece: return(MapPieces.EchoAdd(new Part.MapPiece(br))); case PartType.Object: return(Objects.EchoAdd(new Part.Object(br))); case PartType.Enemy: return(Enemies.EchoAdd(new Part.Enemy(br))); case PartType.Player: return(Players.EchoAdd(new Part.Player(br))); case PartType.Collision: return(Collisions.EchoAdd(new Part.Collision(br))); case PartType.Protoboss: return(Protobosses.EchoAdd(new Part.Protoboss(br))); case PartType.Navmesh: return(Navmeshes.EchoAdd(new Part.Navmesh(br))); case PartType.DummyObject: return(DummyObjects.EchoAdd(new Part.DummyObject(br))); case PartType.DummyEnemy: return(DummyEnemies.EchoAdd(new Part.DummyEnemy(br))); case PartType.ConnectCollision: return(ConnectCollisions.EchoAdd(new Part.ConnectCollision(br))); default: throw new NotImplementedException($"Unimplemented part type: {type}"); } }