public void SetUp() { instance = new EntityInstance(); }
public void ImportJson(IMap map, string jsonStr) { JObject root = (JObject)JsonConvert.DeserializeObject(jsonStr); List<string> entityNames = new List<string>(); foreach (JToken entToken in root["ExtractedEntities"]) { entityNames.Add((string)entToken); } map.RemoveEntitiesWithName(entityNames); ILayer defaultLayer = map.GetOrCreateLayer("New entities"); defaultLayer.Color = ColorRgba.Standard.Violet; foreach (JToken entToken in root["Entities"]) { EntityInstance instance = new EntityInstance(); instance.EntityName = (string)entToken["EntityName"]; instance.GroupId = (int)entToken["GroupId"]; for (int i = 0; i < instance.LayerMasks.Length; i++) { uint mask = (uint)entToken["LayerMasks"][i]; instance.LayerMasks[i] = mask; } foreach (var fieldKeyValuePair in entToken["Fields"]) { JProperty property = (JProperty)fieldKeyValuePair; string name = property.Name; int typeId = (int)property.Value["TypeId"]; int numFields = (int)property.Value["NumFields"]; IType type = TypeFactory.Create(typeId, numFields); JsonConvert.PopulateObject(property.Value.ToString(), type); instance.Fields[name] = type; } bool isNew = ((bool?)entToken["IsNew"]) == true; if (isNew) { instance.AddToLayer(defaultLayer); } map.Entities.Add(instance); } }
public void Read(BinaryReader reader) { char[] magicNumber = reader.ReadChars(3); if (magicNumber[0] != 'L' || magicNumber[1] != 'V' || magicNumber[2] != 'L') { throw new ApplicationException("Not a level"); } LevelSpecVersion = reader.ReadInt32(); byte unknown = reader.ReadByte(); int geometrySize = reader.ReadInt32(); Geometry = reader.ReadBytes(geometrySize); while (reader.BaseStream.Position <= reader.BaseStream.Length - 4) { int declaration = reader.ReadInt32(); int size = reader.ReadInt32(); long startPosition = reader.BaseStream.Position; switch (declaration) { case EntityDeclaration: { EntityInstance instance = new EntityInstance(); instance.Read(reader); Entities.Add(instance); break; } case LayersDeclaration: { Layers.Clear(); IList<ILayer> layers = LayerSerializer.Read(reader); foreach (ILayer layer in layers) { Layers.Add(layer); } break; } case GroupsDeclaration: { Groups.Clear(); IList<IGroup> groups = GroupSerializer.Read(reader); foreach (IGroup group in groups) { Groups.Add(group); } break; } case ViewportsDelcaration: { string xml = reader.ReadLpUnicode(); Viewports = XDocument.Parse(xml); break; } default: throw new ApplicationException(String.Format("Unknown group id: {0:X} at position {1:X}", startPosition)); } long endPosition = reader.BaseStream.Position; long amountRead = endPosition - startPosition; if (amountRead < size) { throw new ApplicationException("Read too little"); } if (amountRead > size) { throw new ApplicationException("Read too much"); } } }