private void LoadWithSideData <T, S>(Dictionary <string, WithSideData <T> > datas, WithSideDataSpec <S> spec, WithSideData <T> fallback, SideDataLoader <T, S> sideDataLoader) { if (spec == null) { return; } if (spec.name == null) { Debug.LogWarning($"WithSideDataSpec without a name will be ignored. spec:\n{JsonConvert.SerializeObject(spec)}"); return; } if (datas.ContainsKey(spec.name)) { Debug.LogWarning($"WithSideDataSpec with a duplicated name will be ignored. spec:\n{JsonConvert.SerializeObject(spec)}"); return; } WithSideData <T> sideData = new WithSideData <T>(); sideData.Light = sideDataLoader(spec.light, fallback.Light); sideData.Conflict = sideDataLoader(spec.conflict, fallback.Conflict); datas.Add(spec.name, sideData); }
private void LoadCollectionData <T, S>(WithSideData <T> internalDefault, Dictionary <string, WithSideData <T> > datas, NameSetter defaultNameSetter, CollectionDataSpec <S> spec, SideDataLoader <T, S> sideDataLoader) { string internalDefaultName = "\"Default\""; if (spec == null) { defaultNameSetter(internalDefaultName); datas.Add(internalDefaultName, internalDefault); return; } string defaultName = spec.defaultName ?? internalDefaultName; defaultNameSetter(defaultName); WithSideDataSpec <S> defaultSpec = new WithSideDataSpec <S>(); defaultSpec.name = defaultName; defaultSpec.light = spec.light; defaultSpec.conflict = spec.conflict; LoadWithSideData <T, S>(datas, defaultSpec, internalDefault, sideDataLoader); WithSideData <T> defaultData = datas[defaultName]; if (spec.additional != null) { foreach (WithSideDataSpec <S> additionalSpec in spec.additional) { LoadWithSideData <T, S>(datas, additionalSpec, defaultData, sideDataLoader); } } }