private static void InjectSingle(LDtkDataField instanceField, LDtkFieldInjectorData fieldToInjectInto) { string field = instanceField.__value.NullOrEmpty() ? string.Empty : instanceField.__value[0]; object obj = GetValue(fieldToInjectInto.Info.FieldType, field); fieldToInjectInto.Info.SetValue(fieldToInjectInto.ObjectRef, obj); }
private static void InjectArray(LDtkDataField instanceField, LDtkFieldInjectorData fieldToInjectInto) { object[] objs = GetValues(fieldToInjectInto.Info.FieldType, instanceField.__value); Type elementType = fieldToInjectInto.Info.FieldType.GetElementType(); if (elementType == null) { throw new InvalidOperationException(); } Array array = Array.CreateInstance(elementType, objs.Length); Array.Copy(objs, array, objs.Length); fieldToInjectInto.Info.SetValue(fieldToInjectInto.ObjectRef, array); }
private void DeserializeField(string key) { TextAsset fieldAsset = TestJsonLoader.LoadJson($"/LDtkMockField_{key}.json"); //try deserializing field LDtkDataField field = JsonConvert.DeserializeObject <LDtkDataField>(fieldAsset.text); string identifier = field.__identifier; string type = field.__type; string[] values = field.__value; Debug.Log($"identifier: {identifier}"); Debug.Log($"type: {type}"); Debug.Log($"values: [\"{string.Join("\"], [\"", values)}\"]\n(Square brackets don't actually exist in the string; is only visual and represents the string literals)"); Assert.False(values == null, "Field string array was null. Maybe this should not actually trigger failure."); }
private static void InjectFieldIntoInstance(LDtkDataEntity entity, LDtkDataField instanceField, List <LDtkFieldInjectorData> injectableFields) { string dataFieldIdentifier = instanceField.__identifier; LDtkFieldInjectorData fieldToInjectInto = GetInjectableFieldMatchingIdentifier(injectableFields, dataFieldIdentifier); if (fieldToInjectInto == null) { Debug.LogError($"LDtk: '{entity.__identifier}'s LDtk {instanceField.__type} field \"{dataFieldIdentifier}\" could not find a matching Game Code field to inject into. Is the field not public?"); return; } if (fieldToInjectInto.Info.FieldType.IsArray) { InjectArray(instanceField, fieldToInjectInto); } else { InjectSingle(instanceField, fieldToInjectInto); } }