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);
                }
            }
Beispiel #2
0
            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;
            }