public void OverrideBy(DefinitionSet definitionSet) { for (int i = 0; i < definitionSet.m_cubeSizes.Length; i++) { var cubeSize = definitionSet.m_cubeSizes[i]; if (cubeSize != 0) { m_cubeSizes[i] = cubeSize; } } for (int i = 0; i < definitionSet.m_basePrefabNames.Length; i++) { if (!string.IsNullOrEmpty(definitionSet.m_basePrefabNames[i])) { m_basePrefabNames[i] = definitionSet.m_basePrefabNames[i]; } } foreach (var definition in definitionSet.m_definitionsById) { if (definition.Value.Enabled) { m_definitionsById[definition.Key] = definition.Value; } else { m_definitionsById.Remove(definition.Key); } } foreach (var voxelMaterial in definitionSet.m_voxelMaterialsByName) { m_voxelMaterialsByName[voxelMaterial.Key] = voxelMaterial.Value; } MergeDefinitionLists(m_physicalItemDefinitions, definitionSet.m_physicalItemDefinitions); foreach (var blockPosition in definitionSet.m_blockPositions) { m_blockPositions[blockPosition.Key] = blockPosition.Value; } for (int i = 0; i < definitionSet.m_uniqueCubeBlocksBySize.Length; i++) { var uniqueCubeBlocksBySize = definitionSet.m_uniqueCubeBlocksBySize[i]; foreach (var uniqueCubeBlocks in uniqueCubeBlocksBySize) { m_uniqueCubeBlocksBySize[i][uniqueCubeBlocks.Key] = uniqueCubeBlocks.Value; } } foreach (var blueprintsById in definitionSet.m_blueprintsById) { if (blueprintsById.Value.Enabled) { m_blueprintsById[blueprintsById.Key] = blueprintsById.Value; } else { m_blueprintsById.Remove(blueprintsById.Key); } } MergeDefinitionLists(m_spawnGroupDefinitions, definitionSet.m_spawnGroupDefinitions); foreach (var containerTypeDefinition in definitionSet.m_containerTypeDefinitions) { if (containerTypeDefinition.Value.Enabled) { m_containerTypeDefinitions[containerTypeDefinition.Key] = containerTypeDefinition.Value; } else { m_containerTypeDefinitions.Remove(containerTypeDefinition.Key); } } foreach (var handItem in definitionSet.m_handItemsById) { if (handItem.Value.Enabled) { m_handItemsById[handItem.Key] = handItem.Value; } else { m_handItemsById.Remove(handItem.Key); } } MergeDefinitionLists(m_scenarioDefinitions, definitionSet.m_scenarioDefinitions); foreach (var character in definitionSet.m_characters) { if (character.Value.Enabled) { m_characters[character.Key] = character.Value; } else { m_characters.Remove(character.Key); } } foreach (var classDef in definitionSet.m_blueprintClasses) { if (classDef.Value.Enabled) { m_blueprintClasses[classDef.Key] = classDef.Value; } else { m_blueprintClasses.Remove(classDef.Key); } } foreach (var classEntry in definitionSet.m_categoryClasses) { m_categoryClasses.Add(classEntry); string categoryName = classEntry.Name; MyGuiBlockCategoryDefinition categoryDefinition = null; if (false == m_categories.TryGetValue(categoryName, out categoryDefinition)) { m_categories.Add(categoryName, classEntry); } else { categoryDefinition.ItemIds.AddRange(classEntry.ItemIds); } } foreach (var classEntry in definitionSet.m_blueprintClassEntries) { if (m_blueprintClassEntries.Contains(classEntry)) { if (classEntry.Enabled == false) { m_blueprintClassEntries.Remove(classEntry); } } else { if (classEntry.Enabled == true) { m_blueprintClassEntries.Add(classEntry); } } } foreach (var entry in definitionSet.m_blueprintsByResultId) { if (entry.Value.Enabled) { m_blueprintsByResultId[entry.Key] = entry.Value; } else { m_blueprintsByResultId.Remove(entry.Key); } } foreach (var classEntry in definitionSet.m_environmentItemsEntries) { if (m_environmentItemsEntries.Contains(classEntry)) { if (classEntry.Enabled == false) { m_environmentItemsEntries.Remove(classEntry); } } else { if (classEntry.Enabled == true) { m_environmentItemsEntries.Add(classEntry); } } } foreach (var prefab in definitionSet.m_prefabs) { if (prefab.Value.Enabled) { m_prefabs[prefab.Key] = prefab.Value; } else { m_prefabs.Remove(prefab.Key); } } foreach (var respawnShip in definitionSet.m_respawnShips) { if (respawnShip.Value.Enabled) { m_respawnShips[respawnShip.Key] = respawnShip.Value; } else { m_respawnShips.Remove(respawnShip.Key); } } if (definitionSet.m_environmentDef != null) { if (definitionSet.m_environmentDef.Enabled) { m_environmentDef.Merge(definitionSet.m_environmentDef); } } foreach (var animationSet in definitionSet.m_animationsBySkeletonType) { foreach (var animation in animationSet.Value) { if (animation.Value.Enabled) { if (!m_animationsBySkeletonType.ContainsKey(animationSet.Key)) { m_animationsBySkeletonType[animationSet.Key] = new Dictionary <string, MyAnimationDefinition>(); } m_animationsBySkeletonType[animationSet.Key][animation.Value.Id.SubtypeName] = animation.Value; } else { m_animationsBySkeletonType[animationSet.Key].Remove(animation.Value.Id.SubtypeName); } } } foreach (var soundDef in definitionSet.m_sounds) { // Enabled attribute is handled differently with sounds to prevent confusion between removed sound and missing sound m_sounds[soundDef.Key] = soundDef.Value; } foreach (var weaponDef in definitionSet.m_weaponDefinitionsById) { if (weaponDef.Value.Enabled) { m_weaponDefinitionsById[weaponDef.Key] = weaponDef.Value; } else { m_weaponDefinitionsById.Remove(weaponDef.Key); } } foreach (var ammoDef in definitionSet.m_ammoDefinitionsById) { if (ammoDef.Value.Enabled) { m_ammoDefinitionsById[ammoDef.Key] = ammoDef.Value; } else { m_ammoDefinitionsById.Remove(ammoDef.Key); } } foreach (var behaviorDef in definitionSet.m_behaviorDefinitions) { m_behaviorDefinitions[behaviorDef.Key] = behaviorDef.Value; } foreach (var voxelMapStorageDef in definitionSet.m_voxelMapStorages) { m_voxelMapStorages[voxelMapStorageDef.Key] = voxelMapStorageDef.Value; } foreach (var nameEntry in definitionSet.m_characterNames) { m_characterNames.Add(nameEntry); } }
public void OverrideBy(DefinitionSet definitionSet) { base.OverrideBy(definitionSet); foreach (var def in definitionSet.m_gridCreateDefinitions) { m_gridCreateDefinitions[def.Key] = def.Value; } for (int i = 0; i < definitionSet.m_cubeSizes.Length; i++) { var cubeSize = definitionSet.m_cubeSizes[i]; if (cubeSize != 0) { m_cubeSizes[i] = cubeSize; m_cubeSizesOriginal[i] = definitionSet.m_cubeSizesOriginal[i]; } } for (int i = 0; i < definitionSet.m_basePrefabNames.Length; i++) { if (!string.IsNullOrEmpty(definitionSet.m_basePrefabNames[i])) { m_basePrefabNames[i] = definitionSet.m_basePrefabNames[i]; } } m_definitionsById.Merge(definitionSet.m_definitionsById); foreach (var voxelMaterial in definitionSet.m_voxelMaterialsByName) { m_voxelMaterialsByName[voxelMaterial.Key] = voxelMaterial.Value; } foreach (var physicalMaterial in definitionSet.m_physicalMaterialsByName) { m_physicalMaterialsByName[physicalMaterial.Key] = physicalMaterial.Value; } MergeDefinitionLists(m_physicalItemDefinitions, definitionSet.m_physicalItemDefinitions); foreach (var blockPosition in definitionSet.m_blockPositions) { m_blockPositions[blockPosition.Key] = blockPosition.Value; } for (int i = 0; i < definitionSet.m_uniqueCubeBlocksBySize.Length; i++) { var uniqueCubeBlocksBySize = definitionSet.m_uniqueCubeBlocksBySize[i]; foreach (var uniqueCubeBlocks in uniqueCubeBlocksBySize) { m_uniqueCubeBlocksBySize[i][uniqueCubeBlocks.Key] = uniqueCubeBlocks.Value; } } m_blueprintsById.Merge(definitionSet.m_blueprintsById); MergeDefinitionLists(m_spawnGroupDefinitions, definitionSet.m_spawnGroupDefinitions); m_containerTypeDefinitions.Merge(definitionSet.m_containerTypeDefinitions); m_handItemsById.Merge(definitionSet.m_handItemsById); MergeDefinitionLists(m_scenarioDefinitions, definitionSet.m_scenarioDefinitions); foreach (var character in definitionSet.m_characters) { if (character.Value.Enabled) { m_characters[character.Key] = character.Value; } else { m_characters.Remove(character.Key); } } m_blueprintClasses.Merge(definitionSet.m_blueprintClasses); foreach (var classEntry in definitionSet.m_categoryClasses) { m_categoryClasses.Add(classEntry); string categoryName = classEntry.Name; MyGuiBlockCategoryDefinition categoryDefinition = null; if (false == m_categories.TryGetValue(categoryName, out categoryDefinition)) { m_categories.Add(categoryName, classEntry); } else { categoryDefinition.ItemIds.UnionWith(classEntry.ItemIds); } } foreach (var classEntry in definitionSet.m_blueprintClassEntries) { if (m_blueprintClassEntries.Contains(classEntry)) { if (classEntry.Enabled == false) { m_blueprintClassEntries.Remove(classEntry); } } else { if (classEntry.Enabled == true) { m_blueprintClassEntries.Add(classEntry); } } } m_blueprintsByResultId.Merge(definitionSet.m_blueprintsByResultId); foreach (var classEntry in definitionSet.m_environmentItemsEntries) { if (m_environmentItemsEntries.Contains(classEntry)) { if (classEntry.Enabled == false) { m_environmentItemsEntries.Remove(classEntry); } } else { if (classEntry.Enabled == true) { m_environmentItemsEntries.Add(classEntry); } } } foreach (var blockEntry in definitionSet.m_componentBlockEntries) { if (m_componentBlockEntries.Contains(blockEntry)) { if (blockEntry.Enabled == false) { m_componentBlockEntries.Remove(blockEntry); } } else { if (blockEntry.Enabled == true) { m_componentBlockEntries.Add(blockEntry); } } } foreach (var prefab in definitionSet.m_prefabs) { if (prefab.Value.Enabled) { m_prefabs[prefab.Key] = prefab.Value; } else { m_prefabs.Remove(prefab.Key); } } foreach (var respawnShip in definitionSet.m_respawnShips) { if (respawnShip.Value.Enabled) { m_respawnShips[respawnShip.Key] = respawnShip.Value; } else { m_respawnShips.Remove(respawnShip.Key); } } foreach (var animationSet in definitionSet.m_animationsBySkeletonType) { foreach (var animation in animationSet.Value) { if (animation.Value.Enabled) { if (!m_animationsBySkeletonType.ContainsKey(animationSet.Key)) { m_animationsBySkeletonType[animationSet.Key] = new Dictionary <string, MyAnimationDefinition>(); } m_animationsBySkeletonType[animationSet.Key][animation.Value.Id.SubtypeName] = animation.Value; } else { m_animationsBySkeletonType[animationSet.Key].Remove(animation.Value.Id.SubtypeName); } } } foreach (var soundDef in definitionSet.m_sounds) { // Enabled attribute is handled differently with sounds to prevent confusion between removed sound and missing sound m_sounds[soundDef.Key] = soundDef.Value; } m_weaponDefinitionsById.Merge(definitionSet.m_weaponDefinitionsById); m_ammoDefinitionsById.Merge(definitionSet.m_ammoDefinitionsById); m_behaviorDefinitions.Merge(definitionSet.m_behaviorDefinitions); foreach (var voxelMapStorageDef in definitionSet.m_voxelMapStorages) { m_voxelMapStorages[voxelMapStorageDef.Key] = voxelMapStorageDef.Value; } foreach (var nameEntry in definitionSet.m_characterNames) { m_characterNames.Add(nameEntry); } if (definitionSet.m_battleDefinition != null) { if (definitionSet.m_battleDefinition.Enabled) { m_battleDefinition.Merge(definitionSet.m_battleDefinition); } } foreach (var entry in definitionSet.m_componentSubstitutions) { m_componentSubstitutions[entry.Key] = entry.Value; } m_componentGroups.Merge(definitionSet.m_componentGroups); foreach (var entry in definitionSet.m_planetGeneratorDefinitions) { if (entry.Value.Enabled) { m_planetGeneratorDefinitions[entry.Key] = entry.Value; } else { m_planetGeneratorDefinitions.Remove(entry.Key); } } foreach (var entry in definitionSet.m_planetPrefabDefinitions) { if (entry.Value.Enabled) { m_planetPrefabDefinitions[entry.Key] = entry.Value; } else { m_planetPrefabDefinitions.Remove(entry.Key); } } foreach (var entry in definitionSet.m_groupedIds) { if (m_groupedIds.ContainsKey(entry.Key)) { var localGroup = m_groupedIds[entry.Key]; foreach (var key in entry.Value) { localGroup[key.Key] = key.Value; } } else { m_groupedIds[entry.Key] = entry.Value; } } m_scriptedGroupDefinitions.Merge(definitionSet.m_scriptedGroupDefinitions); m_pirateAntennaDefinitions.Merge(definitionSet.m_pirateAntennaDefinitions); if (definitionSet.m_destructionDefinition != null) { if (definitionSet.m_destructionDefinition.Enabled) { m_destructionDefinition.Merge(definitionSet.m_destructionDefinition); } } foreach (var entry in definitionSet.m_mapMultiBlockDefToCubeBlockDef) { if (m_mapMultiBlockDefToCubeBlockDef.ContainsKey(entry.Key)) { m_mapMultiBlockDefToCubeBlockDef.Remove(entry.Key); } m_mapMultiBlockDefToCubeBlockDef.Add(entry.Key, entry.Value); } foreach (var entry in definitionSet.m_idToRope) { m_idToRope[entry.Key] = entry.Value; } m_entityComponentDefinitions.Merge(definitionSet.m_entityComponentDefinitions); m_entityContainers.Merge(definitionSet.m_entityContainers); m_lootBagDefinition = definitionSet.m_lootBagDefinition; }