Beispiel #1
0
 private void PrintSet(StringBuilder output, Dictionary <HashSet <MatPairStruct>, int> material)
 {
     foreach (var item in material)
     {
         if (item.Key.Count == 0)
         {
             output.AppendFormat("Found {0} empty instances.", item.Value).AppendLine();
         }
         else
         {
             output.Append("Found ").Append(item.Value).Append(" instances of:").AppendLine();
             output.Append(item.Key.Count).Append("; ");
             MatPairStruct[] matList = new MatPairStruct[item.Key.Count];
             item.Key.CopyTo(matList);
             Array.Sort(matList);
             foreach (var mat in matList)
             {
                 if (MaterialRaws.Instance.ContainsKey(mat))
                 {
                     output.Append(MaterialRaws.Instance[mat].id).Append("; ");
                 }
                 else
                 {
                     output.Append(mat).Append("; ");
                 }
             }
             output.AppendLine();
         }
     }
 }
    bool GetMaterialRef(MatPairStruct material, MapDataStore.Tile tile, MeshLayer layer, out T value)
    {
        Content cont;

        if (materialMatcher.TryGetValue(material, out cont))
        {
            if (thisMaterialMatcher == null)
            {
                value = cont.GetValue(tile, layer);
                return(true);
            }
            else if (cont.overloadedItem != null)
            {
                if (cont.overloadedItem.GetValue(tile, layer, out value))
                {
                    return(true);
                }
            }
        }
        if (thisMaterialMatcher != null && thisMaterialMatcher.TryGetValue(material, out value))
        {
            return(true);
        }
        value = default(T);
        return(false);
    }
Beispiel #3
0
 public static ClothingTexture GetTexture(MatPairStruct item)
 {
     if (!Application.isPlaying)
     {
         var cloth = Resources.Load <ClothingTexture>("Clothing/" + ItemRaws.Instance[item].id);
         if (cloth == null)
         {
             cloth = Resources.Load <ClothingTexture>("Clothing/DEFAULT");
         }
         return(cloth);
     }
     if (clothingLookup == null)
     {
         clothingLookup = new Dictionary <MatPairStruct, ClothingTexture>();
     }
     if (!clothingLookup.ContainsKey(item))
     {
         clothingLookup[item] = Resources.Load <ClothingTexture>("Clothing/" + ItemRaws.Instance[item].id);
     }
     if (clothingLookup[item] == null)
     {
         clothingLookup[item] = Resources.Load <ClothingTexture>("Clothing/DEFAULT");
     }
     return(clothingLookup[item]);
 }
 static private void PopulateWordLists()
 {
     foreach (var race in _creatureRawList)
     {
         foreach (var caste in race.caste)
         {
             MatPairStruct id = new MatPairStruct(race.index, caste.index);
             if (_casteIds == null)
             {
                 _casteIds = new Dictionary <string, Dictionary <string, MatPairStruct> >();
             }
             if (!_casteIds.ContainsKey(race.creature_id))
             {
                 _casteIds[race.creature_id] = new Dictionary <string, MatPairStruct>();
             }
             _casteIds[race.creature_id][caste.caste_id] = id;
         }
         {
             MatPairStruct id = new MatPairStruct(race.index, -1);
             if (_casteIds == null)
             {
                 _casteIds = new Dictionary <string, Dictionary <string, MatPairStruct> >();
             }
             if (!_casteIds.ContainsKey(race.creature_id))
             {
                 _casteIds[race.creature_id] = new Dictionary <string, MatPairStruct>();
             }
             _casteIds[race.creature_id]["*"] = id;
         }
     }
 }
Beispiel #5
0
    public Texture2D CreateImage(ArtImage artImage)
    {
        for (int i = 0; i < indexWidth * indexWidth; i++)
        {
            colors[i] = new Color32(0, 1, 0, 0);
        }
        MatPairStruct id = artImage.id;

        if (generatedImages.ContainsKey(id))
        {
            return(generatedImages[id]);
        }

        Texture2D texture = null;

        Rect[][] imagePattern = GetFullPattern(artImage);
        for (int i = 0; i < imagePattern.Length; i++)
        {
            foreach (var item in imagePattern[i])
            {
                CopyElement(item, GetElementTile(artImage.elements[i]));
            }
        }

        texture = new Texture2D(16, 16, TextureFormat.RGBAHalf, false, true);
        texture.SetPixels(colors);
        texture.Apply();
        texture.name        = id.ToString();
        texture.filterMode  = FilterMode.Point;
        generatedImages[id] = texture;
        return(texture);
    }
Beispiel #6
0
 public T this[MatPairStruct mat]
 {
     set
     {
         BaseContainer[mat] = value;
     }
 }
 static void AddCreature(string race, string caste, MatPairStruct id)
 {
     if (_casteIds == null)
         _casteIds = new Dictionary<string, Dictionary<string, MatPairStruct>>();
     if (!_casteIds.ContainsKey(race))
         _casteIds[race] = new Dictionary<string, MatPairStruct>();
     _casteIds[race][caste] = id;
 }
Beispiel #8
0
    public static Color GetGrowthColor(GrowthPeriod period, int growthID, MatPairStruct mat)
    {
        if (period == GrowthPeriod.Fresh)
        {
            return(GetColor(mat));
        }
        if (mat.mat_index >= DFConnection.Instance.NetPlantRawList.plant_raws.Count)
        {
            return(GetColor(mat));
        }
        if (growthID >= DFConnection.Instance.NetPlantRawList.plant_raws[mat.mat_index].growths.Count)
        {
            return(GetColor(mat));
        }

        var growth       = DFConnection.Instance.NetPlantRawList.plant_raws[mat.mat_index].growths[growthID];
        int currentTicks = TimeHolder.DisplayedTime.CurrentYearTicks;

        RemoteFortressReader.GrowthPrint freshPrints  = null;
        RemoteFortressReader.GrowthPrint currentPrint = null;
        RemoteFortressReader.GrowthPrint stalePrint   = null;

        int minTicks = int.MaxValue;
        int maxTicks = int.MinValue;

        foreach (var print in growth.prints)
        {
            if ((print.timing_start == -1 || print.timing_start <= currentTicks) && (print.timing_end == -1 || print.timing_end >= currentTicks))
            {
                currentPrint = print;
            }
            if (print.timing_start == -1 || print.timing_start < minTicks)
            {
                minTicks    = print.timing_start;
                freshPrints = print;
            }
            if (print.timing_end == -1 || print.timing_end > maxTicks)
            {
                maxTicks   = print.timing_end;
                stalePrint = print;
            }
        }
        if (currentPrint == null)
        {
            currentPrint = stalePrint;
        }
        switch (period)
        {
        case GrowthPeriod.Current:
            return(DfColor.MorphColor(GetColor(mat), freshPrints.color, currentPrint.color));

        case GrowthPeriod.Stale:
            return(DfColor.MorphColor(GetColor(mat), freshPrints.color, stalePrint.color));
        }
        return(GetColor(mat));
    }
Beispiel #9
0
    public static int GetShapeIndex(MatPairStruct mat)
    {
        MaterialTextureSet textureSet;

        if (Instance.MaterialTextures.TryGetValue(mat, out textureSet))
        {
            return(textureSet.shapeIndex);
        }
        return(Instance.DefaultShapeTexIndex);
    }
Beispiel #10
0
 void Count(Dictionary <MatPairStruct, int> dict, MatPairStruct value)
 {
     if (!dict.ContainsKey(value))
     {
         dict[value] = 1;
     }
     else
     {
         dict[value] = dict[value] + 1;
     }
 }
Beispiel #11
0
 public T this[MatPairStruct mat]
 {
     set
     {
         if (itemList == null)
         {
             itemList = new Dictionary <MatPairStruct, T>();
         }
         itemList[mat] = value;
     }
 }
 void TrySetMatch(MaterialMatch match, MatPairStruct mat)
 {
     if (matList.ContainsKey(mat))
     {
         if (matList[mat].difference < match.difference) //overwrite existing exact matches
         {
             return;                                     //the comparitor can be changed to <= if that behavior is not desired.
         }
     }
     matList[mat] = match;
 }
Beispiel #13
0
 static void AddCreature(string race, string caste, MatPairStruct id)
 {
     if (_casteIds == null)
     {
         _casteIds = new Dictionary <string, Dictionary <string, MatPairStruct> >();
     }
     if (!_casteIds.ContainsKey(race))
     {
         _casteIds[race] = new Dictionary <string, MatPairStruct>();
     }
     _casteIds[race][caste] = id;
 }
 internal static void AddFakeCreaturesToList(Dictionary <MatPairStruct, MaterialDefinition> creatures, string prefix)
 {
     foreach (string template in templateList)
     {
         MatPairStruct      creatureCaste = new MatPairStruct(count, -1);
         MaterialDefinition creatureDef   = new MaterialDefinition();
         creatureDef.mat_pair     = creatureCaste;
         creatureDef.id           = prefix.ToUpper() + "_" + template.ToUpper() + ":DEFAULT";
         creatureDef.name         = prefix.ToLower() + " " + template.ToLower();
         creatures[creatureCaste] = creatureDef;
         count--;
     }
 }
Beispiel #15
0
 public int GetItemTile(MatPairStruct item)
 {
     if (ItemSpriteMap.ContainsKey(item))
     {
         return(ItemSpriteMap[item]);
     }
     item = new MatPairStruct(item.mat_type, -1);
     if (ItemSpriteMap.ContainsKey(item))
     {
         return(ItemSpriteMap[item]);
     }
     return(7);
 }
Beispiel #16
0
 public T this[MatPairStruct caste]
 {
     set
     {
         if (creatureRaceList == null)
         {
             creatureRaceList = new Dictionary <MatPairStruct, RaceMatch>();
         }
         RaceMatch newItem;
         newItem.item            = value;
         newItem.difference      = 0;
         creatureRaceList[caste] = newItem;
     }
 }
Beispiel #17
0
    /// <summary>
    /// Gets a color for a given item type and material combination, including any seasonal variations.
    /// </summary>
    /// <param name="item">Item type</param>
    /// <param name="mat">Material</param>
    /// <returns></returns>
    public static Color GetColor(MatPairStruct item, MatPairStruct mat)
    {
        switch (item.mat_type)
        {
        case 55:    //PLANT_GROWTH
        {
            return(GetGrowthColor(GrowthPeriod.Current, item.mat_index, mat));
        }

        default:
            break;
        }
        return(GetColor(mat));
    }
Beispiel #18
0
    public static int GetShapeIndex(MatPairStruct mat)
    {
        MaterialTextureSet textureSet;

        if (MaterialCollection.Instance.TryGetValue(mat, out textureSet))
        {
            return(textureSet.shapeIndex);
        }
        if (Instance == null)
        {
            return(0);
        }
        return(Instance.DefaultShapeTexIndex);
    }
Beispiel #19
0
 void TrySetMatch(RaceMatch match, MatPairStruct mat)
 {
     if (creatureRaceList == null)
     {
         creatureRaceList = new Dictionary <MatPairStruct, RaceMatch>();
     }
     if (creatureRaceList.ContainsKey(mat))
     {
         if (creatureRaceList[mat].difference < match.difference) //overwrite existing exact matches
         {
             return;                                              //the comparitor can be changed to <= if that behavior is not desired.
         }
     }
     creatureRaceList[mat] = match;
 }
Beispiel #20
0
 /// <summary>
 /// sets an object to the specified race/caste ID.
 /// This will always take precedence over objects set by string tokens.
 /// </summary>
 /// <param name="caste">numerical race/caste</param>
 /// <returns></returns>
 public T this[MatPairStruct caste]
 {
     set
     {
         if (creatureRaceList == null)
         {
             creatureRaceList = new Dictionary <MatPairStruct, T>();
         }
         creatureRaceList[caste] = value;
     }
     get
     {
         return(creatureRaceList[caste]);
     }
 }
 private static void PopulateWordLists()
 {
     foreach (var race in _creatureRawList)
     {
         foreach (var caste in race.caste)
         {
             MatPairStruct id = new MatPairStruct(race.index, caste.index);
             if (_casteIds == null)
                 _casteIds = new Dictionary<string, Dictionary<string, MatPairStruct>>();
             if (!_casteIds.ContainsKey(race.creature_id))
                 _casteIds[race.creature_id] = new Dictionary<string, MatPairStruct>();
             _casteIds[race.creature_id][caste.caste_id] = id;
         }
     }
 }
 public void Modify(int?tileType                    = null,
                    MatPairStruct?material          = null,
                    MatPairStruct?base_material     = null,
                    MatPairStruct?layer_material    = null,
                    MatPairStruct?vein_material     = null,
                    int?waterLevel                  = null,
                    int?magmaLevel                  = null,
                    MatPairStruct?construction_item = null,
                    int?rampType                    = null)
 {
     if (tileType != null)
     {
         this.tileType = tileType.Value;
     }
     if (material != null)
     {
         this.material = material.Value;
     }
     if (base_material != null)
     {
         this.base_material = base_material.Value;
     }
     if (layer_material != null)
     {
         this.layer_material = layer_material.Value;
     }
     if (vein_material != null)
     {
         this.vein_material = vein_material.Value;
     }
     if (waterLevel != null)
     {
         this.waterLevel = waterLevel.Value;
     }
     if (magmaLevel != null)
     {
         this.magmaLevel = magmaLevel.Value;
     }
     if (construction_item != null)
     {
         this.construction_item = construction_item.Value;
     }
     if (rampType != null)
     {
         this.rampType = rampType.Value;
     }
 }
Beispiel #23
0
 public bool TryGetValue(MatPairStruct caste, out T value)
 {
     if (creatureRaceList != null)
     {
         if (creatureRaceList.TryGetValue(caste, out value))
         {
             return(true);
         }
         caste = new MatPairStruct(caste.mat_type, -1);
         if (creatureRaceList.TryGetValue(caste, out value))
         {
             return(true);
         }
     }
     value = default(T);
     return(false);
 }
    public bool TryGetValue(MatPairStruct mat, out T value)
    {
        MaterialMatch output;

        if (matList.TryGetValue(mat, out output))
        {
            value = output.item;
            return(true);
        }
        mat = new MatPairStruct(mat.mat_type, -1); //Try once more with a more generic value.
        if (matList.TryGetValue(mat, out output))
        {
            value = output.item;
            return(true);
        }
        value = default(T);
        return(false);
    }
Beispiel #25
0
    public static ItemModel InstantiateItem(Item item, Transform parent, bool worldPositionStays = true)
    {
        MatPairStruct type = item.type;
        ItemModel     placedItem;

        var prefab = Instance.defaultItem;

        if (itemPrefabs.Count == 0)
        {
            Instance.ForceLoadItems();
        }

        if (!itemPrefabs.ContainsKey(type))
        {
            type = new MatPairStruct(type.mat_type, -1);
        }
        if (!itemPrefabs.ContainsKey(type))
        {
            type = new MatPairStruct(-1, -1);
        }
        if (itemPrefabs.ContainsKey(type))
        {
            prefab = itemPrefabs[type];
        }

        if (worldPositionStays)
        {
            placedItem = Instantiate(prefab, GameMap.DFtoUnityCoord(item.pos), Quaternion.identity);
        }
        else
        {
            placedItem = Instantiate(prefab);
        }

        if (ItemRaws.Instance.ContainsKey(item.type))
        {
            placedItem.name = ItemRaws.Instance[item.type].id + "_" + item.id;
        }

        placedItem.transform.SetParent(parent, worldPositionStays);
        placedItem.transform.parent = parent;
        placedItem.UpdateMaterial(item);
        return(placedItem);
    }
Beispiel #26
0
    /// <summary>
    /// Get the color associated with a material, falling back to DF state color.
    /// </summary>
    /// <param name="mat"></param>
    /// <returns></returns>
    public static Color GetColor(MatPairStruct mat)
    {
        MaterialTextureSet textureSet;

        if (MaterialCollection.Instance.TryGetValue(mat, out textureSet))
        {
            return(textureSet.color);
        }
        if (!MaterialRaws.Instance.ContainsKey(mat))
        {
            return(new Color32(128, 128, 128, 128));
        }
        var stateColor = MaterialRaws.Instance[mat].state_color;

        if (stateColor == null)
        {
            return(new Color32(128, 128, 128, 128));
        }
        return(new Color32((byte)stateColor.red, (byte)stateColor.green, (byte)stateColor.blue, 128));
    }
Beispiel #27
0
    /// <summary>
    /// Get the color associated with a material, falling back to DF state color.
    /// </summary>
    /// <param name="mat"></param>
    /// <returns></returns>
    public static Color GetColor(MatPairStruct mat)
    {
        MaterialTextureSet textureSet;

        if (Instance.MaterialTextures.TryGetValue(mat, out textureSet))
        {
            return(textureSet.color);
        }
        if (!GameMap.materials.ContainsKey(mat))
        {
            return(new Color32(128, 128, 128, 128));
        }
        var stateColor = GameMap.materials[mat].state_color;

        if (stateColor == null)
        {
            return(new Color32(128, 128, 128, 128));
        }
        return(new Color32((byte)stateColor.red, (byte)stateColor.green, (byte)stateColor.blue, 128));
    }
Beispiel #28
0
 public bool Get(MatPairStruct mat, out T value)
 {
     if (itemList != null)
     {
         T output;
         if (itemList.TryGetValue(mat, out output))
         {
             value = output;
             return(true);
         }
         mat = new MatPairStruct(mat.Type, -1); //Try once more with a more generic value.
         if (itemList.TryGetValue(mat, out output))
         {
             value = output;
             return(true);
         }
     }
     value = default(T);
     return(false);
 }
    private void LoadLayeredSpriteSets()
    {
        var spriteSetList = Resources.LoadAll <CreatureSpriteCollection>("Creatures");

        foreach (var spriteSet in spriteSetList)
        {
            MatPairStruct raceID = new MatPairStruct(-1, -1);
            //With generated creatures, the same sprite can potentially match more than one creature.
            var raceRawList = GeneratedCreatureTranslator.GetCreatureRaw(spriteSet.race);
            if (raceRawList == null)
            {
                continue;
            }
            foreach (var raceRaw in raceRawList)
            {
                raceID = new MatPairStruct(raceRaw.index, -1);
                if (!string.IsNullOrEmpty(spriteSet.caste))
                {
                    var casteRaw = raceRaw.caste.Find(x => x.caste_id == spriteSet.caste);
                    if (casteRaw == null)
                    {
                        continue;
                    }
                    raceID = new MatPairStruct(raceID.Race, casteRaw.index);
                }
                if (!spriteSets.ContainsKey(raceID.Race))
                {
                    spriteSets[raceID.Race] = new ProfessionDictionary();
                }
                if (!spriteSets[raceID.Race].ContainsKey(spriteSet.profession))
                {
                    spriteSets[raceID.Race][spriteSet.profession] = new SpecialDictionary();
                }
                if (!spriteSets[raceID.Race][spriteSet.profession].ContainsKey(spriteSet.special))
                {
                    spriteSets[raceID.Race][spriteSet.profession][spriteSet.special] = new CasteDictionary();
                }
                spriteSets[raceID.Race][spriteSet.profession][spriteSet.special][raceID.Caste] = spriteSet;
            }
        }
    }
Beispiel #30
0
 public T this[MatPairStruct mat]
 {
     //get
     //{
     //    T output;
     //    if (!TryGetValue(mat, out output))
     //        output = default(T);
     //    return output;
     //}
     set
     {
         if (matList == null)
         {
             matList = new Dictionary <MatPairStruct, MaterialMatch>();
         }
         MaterialMatch newItem;
         newItem.item       = value;
         newItem.difference = 0;       //a material pair will always be an exact match.
         matList[mat]       = newItem; //actually, is that desired?
     }
 }
Beispiel #31
0
        public static bool TryGetCasteID(string token, out MatPairStruct id)
        {
            string[] parts = token.Split(':');
            string   race  = parts[0];
            string   caste = "*";

            if (parts.Length > 1)
            {
                caste = parts[1];
            }
            if (!CasteIDs.ContainsKey(race))
            {
                id = new MatPairStruct(-1, -1);
                return(false);
            }
            if (!CasteIDs[race].ContainsKey(caste))
            {
                caste = "*";
            }
            id = CasteIDs[race][caste];
            return(true);
        }
 public T this[MatPairStruct mat]
 {
     get
     {
         if (!TryGetValue(mat, out T output))
         {
             throw new KeyNotFoundException();
         }
         return(output);
     }
     set
     {
         if (matList == null)
         {
             matList = new Dictionary <MatPairStruct, MaterialMatch>();
         }
         MaterialMatch newItem;
         newItem.item       = value;
         newItem.difference = 0;       //a material pair will always be an exact match.
         matList[mat]       = newItem; //actually, is that desired?
     }
 }
Beispiel #33
0
 public void Modify (int? tileType = null,
                    MatPairStruct? material = null,
                    MatPairStruct? base_material = null,
                    MatPairStruct? layer_material = null,
                    MatPairStruct? vein_material = null,
                    int? waterLevel = null,
                    int? magmaLevel = null,
                    MatPairStruct? construction_item = null,
                    int? rampType = null,
                    BuildingStruct? buildingType = null,
                    MatPairStruct? buildingMaterial = null,
                    DFCoord2d? buildingLocalPos = null,
                    BuildingDirection? buildingDirection = null,
                    bool? hidden = null)
 {
     if (tileType != null) {
         this.tileType = tileType.Value;
     }
     if (material != null) {
         this.material = material.Value;
     }
     if (base_material != null) {
         this.base_material = base_material.Value;
     }
     if (layer_material != null) {
         this.layer_material = layer_material.Value;
     }
     if (vein_material != null) {
         this.vein_material = vein_material.Value;
     }
     if (waterLevel != null) {
         this.waterLevel = waterLevel.Value;
     }
     if (magmaLevel != null) {
         this.magmaLevel = magmaLevel.Value;
     }
     if (construction_item != null)
     {
         this.construction_item = construction_item.Value;
     }
     if(rampType != null)
     {
         this.rampType = rampType.Value;
     }
     if(buildingType != null)
     {
         this.buildingType = buildingType.Value;
     }
     if(buildingMaterial != null)
     {
         this.buildingMaterial = buildingMaterial.Value;
     }
     if (buildingLocalPos != null)
         this.buildingLocalPos = buildingLocalPos.Value;
     if (buildingDirection != null)
         this.buildingDirection = buildingDirection.Value;
     if (hidden != null)
         this.hidden = hidden.Value;
 }
Beispiel #34
0
 public void InitOrModifyTile(DFCoord coord,
                        int? tileType = null,
                        MatPairStruct? material = null,
                        MatPairStruct? base_material = null,
                        MatPairStruct? layer_material = null,
                        MatPairStruct? vein_material = null,
                        int? waterLevel = null,
                        int? magmaLevel = null,
                        MatPairStruct? construction_item = null,
                        int? rampType = null,
                        BuildingStruct? buildingType = null,
                        MatPairStruct? buildingMaterial = null,
                        DFCoord2d? buildingLocalPos = null,
                        BuildingDirection? buildingDirection = null,
                        bool? hidden = null)
 {
     DFCoord local = WorldToLocalSpace(coord);
     if (!InSliceBoundsLocal(local.x, local.y, local.z)) {
         throw new UnityException("Can't modify tile outside of slice");
     }
     if (tiles[local.x, local.y, local.z] == null)
         tiles[local.x, local.y, local.z] = new Tile(this, local);
     tiles[local.x, local.y, local.z].Modify(tileType, material, base_material, layer_material, vein_material, waterLevel, magmaLevel, construction_item, rampType, buildingType, buildingMaterial, buildingLocalPos, buildingDirection, hidden);
 }
Beispiel #35
0
    /// <summary>
    /// This is the function that actually decides what mesh and texture each tile gets
    /// </summary>
    /// <param name="buffer">Buffer to put the chosen meshes into for combining</param>
    /// <param name="layer">layer currently being worked on</param>
    /// <param name="tile">The tile to get all the needed info from.</param>
    void FillMeshBuffer(out MeshCombineUtility.MeshInstance buffer, MeshLayer layer, MapDataStore.Tile tile, Vector3 pos)
    {
        buffer = new MeshCombineUtility.MeshInstance();
        Vector2 index1 = Vector2.zero;
        Vector2 index2 = Vector2.zero;
        MeshContent meshContent = null;
        buffer.color = Color.grey;
        if (layer == MeshLayer.Collision)
        {
            if (!ContentLoader.Instance.CollisionMeshConfiguration.GetValue(tile, layer, out meshContent))
            {
                buffer.meshData = null;
                return;
            }
            if (meshContent.MeshData.ContainsKey(MeshLayer.Collision))
                buffer.meshData = meshContent.MeshData[MeshLayer.Collision];
            else if (meshContent.MeshData.ContainsKey(MeshLayer.StaticMaterial))
                buffer.meshData = meshContent.MeshData[MeshLayer.StaticMaterial];
            else
            {
                buffer.meshData = null;
                return;
            }
            buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);
            buffer.hiddenFaces = CalculateHiddenFaces(tile, meshContent.Rotation);
            return;
        }

        if (layer == MeshLayer.BuildingCollision)
        {
            if (tile.buildingType == default(BuildingStruct) || !ContentLoader.Instance.BuildingCollisionMeshConfiguration.GetValue(tile, layer, out meshContent))
            {
                buffer.meshData = null;
                return;
            }
            if (meshContent.MeshData.ContainsKey(MeshLayer.Collision))
                buffer.meshData = meshContent.MeshData[MeshLayer.Collision];
            else if (meshContent.MeshData.ContainsKey(MeshLayer.BuildingMaterial))
                buffer.meshData = meshContent.MeshData[MeshLayer.BuildingMaterial];
            else if (meshContent.MeshData.ContainsKey(MeshLayer.BuildingMaterialCutout))
                buffer.meshData = meshContent.MeshData[MeshLayer.BuildingMaterialCutout];
            else if (meshContent.MeshData.ContainsKey(MeshLayer.BuildingMaterialTransparent))
                buffer.meshData = meshContent.MeshData[MeshLayer.BuildingMaterialTransparent];
            else
            {
                buffer.meshData = null;
                return;
            }
            buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);
            buffer.hiddenFaces = CalculateHiddenFaces(tile, meshContent.Rotation);
            return;
        }
        if (ContentLoader.Instance.DesignationMeshConfiguration.GetValue(tile, layer, out meshContent))
        {
            if (!meshContent.MeshData.ContainsKey(layer))
            {
                buffer.meshData = null;
                return;
            }
            buffer.meshData = meshContent.MeshData[layer];
            buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);

            if (TextureStorage.UsingArray)
            {
                if (meshContent.MaterialTexture != null)
                    index1.x = meshContent.MaterialTexture.ArrayIndex;
                else
                    index1.x = ContentLoader.Instance.DefaultMatTexArrayIndex;
                if (meshContent.ShapeTexture != null)
                    index1.y = meshContent.ShapeTexture.ArrayIndex;
                else
                    index1.y = ContentLoader.Instance.DefaultShapeTexArrayIndex;
                if (meshContent.SpecialTexture != null)
                    index2.x = meshContent.SpecialTexture.ArrayIndex;
                else
                    index2.x = ContentLoader.Instance.DefaultSpecialTexArrayIndex;

                buffer.uv1Transform = Matrix4x4.identity;
                buffer.uv2Force = index1;
                buffer.uv3Force = index2;
            }
            else
            {
                if (meshContent.MaterialTexture != null)
                    buffer.uv1Transform = meshContent.MaterialTexture.UVTransform;
                else
                    buffer.uv1Transform = ContentLoader.Instance.DefaultMatTexTransform;
                if (meshContent.ShapeTexture != null)
                    buffer.uv2Transform = meshContent.ShapeTexture.UVTransform;
                else
                    buffer.uv2Transform = ContentLoader.Instance.DefaultShapeTexTransform;
                if (meshContent.SpecialTexture != null)
                    buffer.uv3Transform = meshContent.SpecialTexture.UVTransform;
                else
                    buffer.uv3Transform = ContentLoader.Instance.DefaultSpecialTexTransform;
            }
            buffer.hiddenFaces = CalculateHiddenFaces(tile, meshContent.Rotation);
            return;
        }
        switch (layer)
        {
            case MeshLayer.GrowthMaterial:
            case MeshLayer.GrowthMaterial1:
            case MeshLayer.GrowthMaterial2:
            case MeshLayer.GrowthMaterial3:
            case MeshLayer.GrowthCutout:
            case MeshLayer.GrowthCutout1:
            case MeshLayer.GrowthCutout2:
            case MeshLayer.GrowthCutout3:
            case MeshLayer.GrowthTransparent:
            case MeshLayer.GrowthTransparent1:
            case MeshLayer.GrowthTransparent2:
            case MeshLayer.GrowthTransparent3:
                {
                    switch (tile.tiletypeMaterial)
                    {
                        case TiletypeMaterial.PLANT:
                        case TiletypeMaterial.ROOT:
                        case TiletypeMaterial.TREE_MATERIAL:
                        case TiletypeMaterial.MUSHROOM:
                            if (!ContentLoader.Instance.GrowthMeshConfiguration.GetValue(tile, layer, out meshContent))
                            {
                                buffer.meshData = null;
                                return;
                            }
                            break;
                        default:
                            buffer.meshData = null;
                            return;
                    }
                }
                break;
            case MeshLayer.BuildingMaterial:
            case MeshLayer.NoMaterialBuilding:
            case MeshLayer.BuildingMaterialCutout:
            case MeshLayer.NoMaterialBuildingCutout:
            case MeshLayer.BuildingMaterialTransparent:
            case MeshLayer.NoMaterialBuildingTransparent:
                {
                    if (tile.buildingType == default(BuildingStruct))
                    {
                        buffer.meshData = null;
                        return;
                    }
                    if (!ContentLoader.Instance.BuildingMeshConfiguration.GetValue(tile, layer, out meshContent))
                    {
                        buffer.meshData = null;
                        return;
                    }
                }
                break;
            default:
                {
                    if (layer == MeshLayer.NaturalTerrain)
                    {
                        if (VoxelGenerator.IsNatural(tile) && !VoxelGenerator.HandleShape(tile) && !VoxelGenerator.UseBoth(tile))
                            layer = MeshLayer.StaticMaterial;
                        else
                        {
                            buffer.meshData = null;
                            return;
                        }
                    }
                    else if (VoxelGenerator.IsNatural(tile) && !VoxelGenerator.UseBoth(tile))
                    {
                        buffer.meshData = null;
                        return;
                    }
                    if (!ContentLoader.Instance.TileMeshConfiguration.GetValue(tile, layer, out meshContent))
                    {
                        buffer.meshData = null;
                        return;
                    }
                }
                break;
        }

        if (!meshContent.MeshData.ContainsKey(layer))
        {
            buffer.meshData = null;
            return;
        }
        buffer.meshData = meshContent.MeshData[layer];
        buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);
        Matrix4x4 matTexTransform = ContentLoader.Instance.DefaultMatTexTransform;
        Matrix4x4 shapeTextTransform = ContentLoader.Instance.DefaultShapeTexTransform;
        Matrix4x4 specialTexTransform = Matrix4x4.identity;

        NormalContent tileTexContent;
        if (meshContent.ShapeTexture == null)
        {
            if (layer == MeshLayer.BuildingMaterial
                || layer == MeshLayer.BuildingMaterialCutout
                || layer == MeshLayer.NoMaterialBuilding
                || layer == MeshLayer.NoMaterialBuildingCutout
                || layer == MeshLayer.BuildingMaterialTransparent
                || layer == MeshLayer.NoMaterialBuildingTransparent
                )
            {
                if (ContentLoader.Instance.BuildingShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                {
                    shapeTextTransform = tileTexContent.UVTransform;
                    index1.y = tileTexContent.ArrayIndex;
                }
            }
            else
            {
                if (ContentLoader.Instance.ShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                {
                    shapeTextTransform = tileTexContent.UVTransform;
                    index1.y = tileTexContent.ArrayIndex;
                }
            }
        }
        else
        {
            shapeTextTransform = meshContent.ShapeTexture.UVTransform;
            index1.y = meshContent.ShapeTexture.ArrayIndex;
        }

        if (meshContent.MaterialTexture != null
            && (layer == MeshLayer.NoMaterial
            || layer == MeshLayer.NoMaterialBuilding
            || layer == MeshLayer.NoMaterialBuildingCutout
            || layer == MeshLayer.NoMaterialBuildingTransparent
            || layer == MeshLayer.NoMaterialCutout
            || layer == MeshLayer.NoMaterialTransparent))
        {
            matTexTransform = meshContent.MaterialTexture.UVTransform;
            index1.x = meshContent.MaterialTexture.ArrayIndex;
        }
        else
        {
            TextureContent matTexContent;

            if (ContentLoader.Instance.MaterialTextureConfiguration.GetValue(tile, layer, out matTexContent))
            {
                matTexTransform = matTexContent.UVTransform;
                index1.x = matTexContent.ArrayIndex;
            }
        }

        if (meshContent.SpecialTexture != null)
        {
            specialTexTransform = meshContent.SpecialTexture.UVTransform;
            index2.x = meshContent.SpecialTexture.ArrayIndex;
        }
        else
        {
            specialTexTransform = ContentLoader.Instance.DefaultSpecialTexTransform;
            index2.x = ContentLoader.Instance.DefaultSpecialTexArrayIndex;
        }

        ColorContent newColorContent;
        Color newColor;
        if (ContentLoader.Instance.ColorConfiguration.GetValue(tile, layer, out newColorContent))
        {
            newColor = newColorContent.color;
        }
        else
        {
            MatPairStruct mat = new MatPairStruct(-1, -1);
            switch (layer)
            {
                case MeshLayer.StaticMaterial:
                case MeshLayer.StaticCutout:
                case MeshLayer.StaticTransparent:
                    mat = tile.material;
                    break;
                case MeshLayer.BaseMaterial:
                case MeshLayer.BaseCutout:
                case MeshLayer.BaseTransparent:
                    mat = tile.base_material;
                    break;
                case MeshLayer.LayerMaterial:
                case MeshLayer.LayerCutout:
                case MeshLayer.LayerTransparent:
                    mat = tile.layer_material;
                    break;
                case MeshLayer.VeinMaterial:
                case MeshLayer.VeinCutout:
                case MeshLayer.VeinTransparent:
                    mat = tile.vein_material;
                    break;
                case MeshLayer.NoMaterial:
                case MeshLayer.NoMaterialCutout:
                case MeshLayer.NoMaterialBuildingCutout:
                case MeshLayer.NoMaterialBuilding:
                case MeshLayer.NoMaterialBuildingTransparent:
                case MeshLayer.NoMaterialTransparent:
                    break;
                case MeshLayer.BuildingMaterial:
                case MeshLayer.BuildingMaterialCutout:
                case MeshLayer.BuildingMaterialTransparent:
                    mat = tile.buildingMaterial;
                    break;
                default:
                    break;
            }
            MaterialDefinition mattie;
            if (materials.TryGetValue(mat, out mattie))
            {
                ColorDefinition color = mattie.state_color;
                if (color == null)
                    newColor = Color.cyan;
                else
                    newColor = new Color(color.red / 255.0f, color.green / 255.0f, color.blue / 255.0f, 1);
            }
            else
            {
                newColor = Color.grey;
            }
        }
        buffer.color = newColor;

        if (TextureStorage.UsingArray)
        {
            buffer.uv1Transform = Matrix4x4.identity;
            buffer.uv2Force = index1;
            buffer.uv3Force = index2;
        }
        else
        {
            buffer.uv1Transform = matTexTransform;
            buffer.uv2Transform = shapeTextTransform;
            buffer.uv3Transform = specialTexTransform;
        }
        buffer.hiddenFaces = CalculateHiddenFaces(tile, meshContent.Rotation);
    }
Beispiel #36
0
 public RegionTile(RemoteFortressReader.RegionTile tile)
 {
     elevation = tile.elevation;
     water_elevation = tile.water_elevation;
     rainfall = tile.rainfall;
     vegetation = tile.vegetation;
     temperature = tile.temperature;
     evilness = tile.evilness;
     drainage = tile.drainage;
     volcanism = tile.volcanism;
     savagery = tile.savagery;
     salinity = tile.salinity;
     rivers = tile.river_tiles;
     surfaceMaterial = tile.surface_material;
     plantMaterials = new List<MatPairStruct>();
     foreach (var item in tile.plant_materials)
     {
         plantMaterials.Add(item);
     }
     buildings = tile.buildings;
     stoneMaterials = new List<MatPairStruct>();
     foreach (var item in tile.stone_materials)
     {
         stoneMaterials.Add(item);
     }
     treeMaterials = new List<MatPairStruct>();
     foreach (var item in tile.tree_materials)
     {
         treeMaterials.Add(item);
     }
     snow = tile.snow;
 }
Beispiel #37
0
    void OnConnectToDF()
    {
        Debug.Log("Connected");
        enabled = true;
        mesher = BlockMesher.GetMesher(meshingThreads);
        // Initialize materials, if available
        if (DFConnection.Instance.NetMaterialList != null)
        {
            if (materials == null)
                materials = new Dictionary<MatPairStruct, RemoteFortressReader.MaterialDefinition>();
            materials.Clear();
            foreach (RemoteFortressReader.MaterialDefinition material in DFConnection.Instance.NetMaterialList.material_list)
            {
                materials[material.mat_pair] = material;
            }
            SaveMaterialList(materials, "MaterialList.csv");
        }
        // Initialize items, if available
        if (DFConnection.Instance.NetItemList != null)
        {
            if (items == null)
                items = new Dictionary<MatPairStruct, RemoteFortressReader.MaterialDefinition>();
            items.Clear();
            foreach (MaterialDefinition material in DFConnection.Instance.NetItemList.material_list)
            {
                items[material.mat_pair] = material;
            }
            SaveMaterialList(items, "ItemList.csv");
        }
        if (DFConnection.Instance.NetBuildingList != null)
        {
            if (buildings == null)
                buildings = new Dictionary<BuildingStruct, BuildingDefinition>();
            buildings.Clear();
            foreach (BuildingDefinition building in DFConnection.Instance.NetBuildingList.building_list)
            {
                buildings[building.building_type] = building;
            }
            SaveBuildingList();
        }
        if (DFConnection.Instance.NetCreatureRawList != null)
        {
            if (creatures == null)
                creatures = new Dictionary<MatPairStruct, MaterialDefinition>();
            foreach (CreatureRaw creatureRaw in DFConnection.Instance.NetCreatureRawList.creature_raws)
            {
                foreach (var caste in creatureRaw.caste)
                {
                    MatPairStruct creatureCaste = new MatPairStruct(creatureRaw.index, caste.index);
                    MaterialDefinition creatureDef = new MaterialDefinition();
                    creatureDef.mat_pair = creatureCaste;
                    creatureDef.id = creatureRaw.creature_id + ":" + caste.caste_id;
                    creatureDef.name = caste.caste_name[0];
                    creatureDef.state_color = creatureRaw.color;
                    creatures[creatureCaste] = creatureDef;
                }
            }
            SaveMaterialList(creatures, "CreatureList.csv");
        }

        SaveTileTypeList();


        UpdateView();

        blockListTimer.Start();
        cullTimer.Start();
        lazyLoadTimer.Start();

        InitializeBlocks();
    }
Beispiel #38
0
 public Tile(MapDataStore container, DFCoord position)
 {
     this.container = container;
     this.position = position;
     tileType = default(int);
     material = default(MatPairStruct);
     base_material = default(MatPairStruct);
     layer_material = default(MatPairStruct);
     vein_material = default(MatPairStruct);
     construction_item = default(MatPairStruct);
     waterLevel = default(int);
     magmaLevel = default(int);
     rampType = 0;
     buildingMaterial = default(MatPairStruct);
     buildingType = default(BuildingStruct);
     buildingLocalPos = default(DFCoord2d);
     buildingDirection = 0;
     Hidden = false;
     trunkPercent = 0;
     positionOnTree = default(DFCoord);
     digDesignation = TileDigDesignation.NO_DIG;
     spatters = null;
 }
Beispiel #39
0
 public void InitOrModifyTile(DFCoord coord,
                        int? tileType = null,
                        MatPairStruct? material = null,
                        MatPairStruct? base_material = null,
                        MatPairStruct? layer_material = null,
                        MatPairStruct? vein_material = null,
                        int? waterLevel = null,
                        int? magmaLevel = null,
                        MatPairStruct? construction_item = null,
                        int? rampType = null,
                        BuildingStruct? buildingType = null,
                        MatPairStruct? buildingMaterial = null,
                        DFCoord2d? buildingLocalPos = null,
                        BuildingDirection? buildingDirection = null,
                        bool? hidden = null,
                        byte? trunkPercent = null,
                        DFCoord? positionOnTree = null,
                        TileDigDesignation? digDesignation = null,
                        List<Spatter> spatters = null)
 {
     if (!InSliceBounds(coord)) {
         throw new UnityException("Can't modify tile outside of slice");
     }
     if (this[coord] == null)
         this[coord] = new Tile(this, coord);
     this[coord].Modify(
         tileType,
         material,
         base_material,
         layer_material,
         vein_material,
         waterLevel,
         magmaLevel,
         construction_item,
         rampType,
         buildingType,
         buildingMaterial,
         buildingLocalPos,
         buildingDirection,
         hidden,
         trunkPercent,
         positionOnTree,
         digDesignation,
         spatters
         );
 }
Beispiel #40
0
 public void Modify(int? tileType = null,
                    MatPairStruct? material = null,
                    MatPairStruct? base_material = null,
                    MatPairStruct? layer_material = null,
                    MatPairStruct? vein_material = null,
                    int? waterLevel = null,
                    int? magmaLevel = null,
                    MatPairStruct? construction_item = null,
                    int? rampType = null,
                    BuildingStruct? buildingType = null,
                    MatPairStruct? buildingMaterial = null,
                    DFCoord2d? buildingLocalPos = null,
                    BuildingDirection? buildingDirection = null,
                    bool? hidden = null,
                    byte? trunkPercent = null,
                    DFCoord? positionOnTree = null,
                    TileDigDesignation? digDesignation = null,
                    List<Spatter> spatters = null)
 {
     if (tileType != null) {
         this.tileType = tileType.Value;
     }
     if (material != null) {
         this.material = material.Value;
     }
     if (base_material != null) {
         this.base_material = base_material.Value;
     }
     if (layer_material != null) {
         this.layer_material = layer_material.Value;
     }
     if (vein_material != null) {
         this.vein_material = vein_material.Value;
     }
     if (waterLevel != null) {
         this.waterLevel = waterLevel.Value;
     }
     if (magmaLevel != null) {
         this.magmaLevel = magmaLevel.Value;
     }
     if (construction_item != null)
     {
         this.construction_item = construction_item.Value;
     }
     if(rampType != null)
     {
         this.rampType = rampType.Value;
     }
     if(buildingType != null)
     {
         this.buildingType = buildingType.Value;
     }
     if(buildingMaterial != null)
     {
         this.buildingMaterial = buildingMaterial.Value;
     }
     if (buildingLocalPos != null)
         this.buildingLocalPos = buildingLocalPos.Value;
     if (buildingDirection != null)
         this.buildingDirection = buildingDirection.Value;
     if (hidden != null)
         Hidden = hidden.Value;
     if (trunkPercent != null)
         this.trunkPercent = trunkPercent.Value;
     if (positionOnTree != null)
         this.positionOnTree = positionOnTree.Value;
     if (digDesignation != null)
         this.digDesignation = digDesignation.Value;
     if (spatters != null)
         this.spatters = spatters;
 }
Beispiel #41
0
 public void CopyFrom(Tile orig)
 {
     container = orig.container;
     position = orig.position;
     tileType = orig.tileType;
     material = orig.material;
     base_material = orig.base_material;
     layer_material = orig.layer_material;
     vein_material = orig.vein_material;
     construction_item = orig.construction_item;
     waterLevel = orig.waterLevel;
     magmaLevel = orig.magmaLevel;
     RampType = orig.RampType;
     buildingType = orig.buildingType;
     buildingMaterial = orig.buildingMaterial;
     buildingLocalPos = orig.buildingLocalPos;
     buildingDirection = orig.buildingDirection;
     Hidden = orig.Hidden;
     trunkPercent = orig.trunkPercent;
     positionOnTree = orig.positionOnTree;
     digDesignation = orig.digDesignation;
     spatters = orig.spatters;
 }
 public Tile(MapDataStore container, DFCoord position)
 {
     this.container = container;
     this.position = position;
     tileType = default(int);
     material = default(MatPairStruct);
     base_material = default(MatPairStruct);
     layer_material = default(MatPairStruct);
     vein_material = default(MatPairStruct);
     construction_item = default(MatPairStruct);
     waterLevel = default(int);
     magmaLevel = default(int);
     rampType = 0;
 }
Beispiel #43
0
 private void PrintSet(StringBuilder output, Dictionary<HashSet<MatPairStruct>, int> material)
 {
     foreach (var item in material)
     {
         if (item.Key.Count == 0)
             output.AppendFormat("Found {0} empty instances.", item.Value).AppendLine();
         else
         {
             output.Append("Found ").Append(item.Value).Append(" instances of:").AppendLine();
             output.Append(item.Key.Count).Append("; ");
             MatPairStruct[] matList = new MatPairStruct[item.Key.Count];
             item.Key.CopyTo(matList);
             Array.Sort(matList);
             foreach (var mat in matList)
             {
                 if (GameMap.materials.ContainsKey(mat))
                     output.Append(GameMap.materials[mat].id).Append("; ");
                 else
                     output.Append(mat).Append("; ");
             }
             output.AppendLine();
         }
     }
 }
Beispiel #44
0
    /// <summary>
    /// This is the function that actually decides what mesh and texture each tile gets
    /// </summary>
    /// <param name="buffer">Buffer to put the chosen meshes into for combining</param>
    /// <param name="layer">layer currently being worked on</param>
    /// <param name="tile">The tile to get all the needed info from.</param>
    void FillMeshBuffer(out MeshCombineUtility.MeshInstance buffer, MeshLayer layer, MapDataStore.Tile tile, Vector3 pos)
    {
        buffer = new MeshCombineUtility.MeshInstance();
        MeshContent meshContent = null;
        if(contentLoader.DesignationMeshConfiguration.GetValue(tile, layer, out meshContent))
        {
            if(!meshContent.MeshData.ContainsKey(layer))
            {
                buffer.meshData = null;
                return;
            }
            buffer.meshData = meshContent.MeshData[layer];
            buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);
            if (meshContent.MaterialTexture != null)
                buffer.uv1Transform = meshContent.MaterialTexture.UVTransform;
            else
                buffer.uv1Transform = contentLoader.DefaultMatTexTransform;
            if (meshContent.ShapeTexture != null)
                buffer.uv2Transform = meshContent.ShapeTexture.UVTransform;
            else
                buffer.uv2Transform = contentLoader.DefaultShapeTexTransform;
            if (meshContent.SpecialTexture != null)
                buffer.uv3Transform = meshContent.SpecialTexture.UVTransform;
            else
                buffer.uv3Transform = contentLoader.DefaultSpecialTexTransform;
            buffer.hiddenFaces = CalculateHiddenFaces(tile);
            return;
        }
        switch (layer)
        {
            case MeshLayer.GrowthMaterial:
            case MeshLayer.GrowthMaterial1:
            case MeshLayer.GrowthMaterial2:
            case MeshLayer.GrowthMaterial3:
            case MeshLayer.GrowthCutout:
            case MeshLayer.GrowthCutout1:
            case MeshLayer.GrowthCutout2:
            case MeshLayer.GrowthCutout3:
            case MeshLayer.GrowthTransparent:
            case MeshLayer.GrowthTransparent1:
            case MeshLayer.GrowthTransparent2:
            case MeshLayer.GrowthTransparent3:
                {
                    switch (tile.tiletypeMaterial)
                    {
                        case TiletypeMaterial.PLANT:
                        case TiletypeMaterial.ROOT:
                        case TiletypeMaterial.TREE_MATERIAL:
                        case TiletypeMaterial.MUSHROOM:
                            if (!contentLoader.GrowthMeshConfiguration.GetValue(tile, layer, out meshContent))
                            {
                                buffer.meshData = null;
                                return;
                            }
                            break;
                        default:
                            buffer.meshData = null;
                            return;
                    }
                }
                break;
            case MeshLayer.BuildingMaterial:
            case MeshLayer.NoMaterialBuilding:
            case MeshLayer.BuildingMaterialCutout:
            case MeshLayer.NoMaterialBuildingCutout:
            case MeshLayer.BuildingMaterialTransparent:
            case MeshLayer.NoMaterialBuildingTransparent:
                {
                    if (tile.buildingType == default(BuildingStruct))
                    {
                        buffer.meshData = null;
                        return;
                    }
                    if (!contentLoader.BuildingMeshConfiguration.GetValue(tile, layer, out meshContent))
                    {
                        buffer.meshData = null;
                        return;
                    }
                }
                break;
            default:
                {
                    if (!contentLoader.TileMeshConfiguration.GetValue(tile, layer, out meshContent))
                    {
                        buffer.meshData = null;
                        return;
                    }
                }
                break;
        }

        if (!meshContent.MeshData.ContainsKey(layer))
        {
            buffer.meshData = null;
            return;
        }
        buffer.meshData = meshContent.MeshData[layer];
        buffer.transform = Matrix4x4.TRS(pos, meshContent.GetRotation(tile), Vector3.one);
        Matrix4x4 shapeTextTransform = contentLoader.DefaultShapeTexTransform;
        NormalContent tileTexContent;
        if (meshContent.ShapeTexture == null)
        {
            if (layer == MeshLayer.BuildingMaterial
                || layer == MeshLayer.BuildingMaterialCutout
                || layer == MeshLayer.NoMaterialBuilding
                || layer == MeshLayer.NoMaterialBuildingCutout
                || layer == MeshLayer.BuildingMaterialTransparent
                || layer == MeshLayer.NoMaterialBuildingTransparent
                )
            {
                if (contentLoader.BuildingShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                    shapeTextTransform = tileTexContent.UVTransform;
            }
            else
            {
                if (contentLoader.ShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                    shapeTextTransform = tileTexContent.UVTransform;
            }
        }
        else
        {
            shapeTextTransform = meshContent.ShapeTexture.UVTransform;
        }

        Matrix4x4 matTexTransform = contentLoader.DefaultMatTexTransform;
        if (meshContent.MaterialTexture != null
            && (layer == MeshLayer.NoMaterial
            || layer == MeshLayer.NoMaterialBuilding
            || layer == MeshLayer.NoMaterialBuildingCutout
            || layer == MeshLayer.NoMaterialBuildingTransparent
            || layer == MeshLayer.NoMaterialCutout
            || layer == MeshLayer.NoMaterialTransparent))
        {
            matTexTransform = meshContent.MaterialTexture.UVTransform;
        }
        else
        {
            TextureContent matTexContent;

            if (contentLoader.MaterialTextureConfiguration.GetValue(tile, layer, out matTexContent))
                matTexTransform = matTexContent.UVTransform;
        }

        Matrix4x4 specialTexTransform = Matrix4x4.identity;

        if(meshContent.SpecialTexture != null)
        {
            specialTexTransform = meshContent.SpecialTexture.UVTransform;
        }
        else
        {
            specialTexTransform = contentLoader.DefaultSpecialTexTransform;
        }

        ColorContent newColorContent;
        Color newColor;
        if (contentLoader.ColorConfiguration.GetValue(tile, layer, out newColorContent))
        {
            newColor = newColorContent.value;
        }
        else
        {
            MatPairStruct mat = new MatPairStruct(-1, -1);
            switch (layer)
            {
                case MeshLayer.StaticMaterial:
                case MeshLayer.StaticCutout:
                case MeshLayer.StaticTransparent:
                    mat = tile.material;
                    break;
                case MeshLayer.BaseMaterial:
                case MeshLayer.BaseCutout:
                case MeshLayer.BaseTransparent:
                    mat = tile.base_material;
                    break;
                case MeshLayer.LayerMaterial:
                case MeshLayer.LayerCutout:
                case MeshLayer.LayerTransparent:
                    mat = tile.layer_material;
                    break;
                case MeshLayer.VeinMaterial:
                case MeshLayer.VeinCutout:
                case MeshLayer.VeinTransparent:
                    mat = tile.vein_material;
                    break;
                case MeshLayer.NoMaterial:
                case MeshLayer.NoMaterialCutout:
                case MeshLayer.NoMaterialBuildingCutout:
                case MeshLayer.NoMaterialBuilding:
                case MeshLayer.NoMaterialBuildingTransparent:
                case MeshLayer.NoMaterialTransparent:
                    break;
                case MeshLayer.BuildingMaterial:
                case MeshLayer.BuildingMaterialCutout:
                case MeshLayer.BuildingMaterialTransparent:
                    mat = tile.buildingMaterial;
                    break;
                default:
                    break;
            }
            MaterialDefinition mattie;
            if (materials.TryGetValue(mat, out mattie))
            {
                ColorDefinition color = mattie.state_color;
                if (color == null)
                    newColor = Color.cyan;
                else
                    newColor = new Color(color.red / 255.0f, color.green / 255.0f, color.blue / 255.0f, 1);
            }
            else
            {
                newColor = Color.grey;
            }
        }
        buffer.color = newColor;
        buffer.uv1Transform = matTexTransform;
        buffer.uv2Transform = shapeTextTransform;
        buffer.uv3Transform = specialTexTransform;
        buffer.hiddenFaces = CalculateHiddenFaces(tile);
    }
 public void InitOrModifyTile(DFCoord coord,
                        int? tileType = null,
                        MatPairStruct? material = null,
                        MatPairStruct? base_material = null,
                        MatPairStruct? layer_material = null,
                        MatPairStruct? vein_material = null,
                        int? waterLevel = null,
                        int? magmaLevel = null,
                        MatPairStruct? construction_item = null,
                        int? rampType = null)
 {
     DFCoord local = WorldToLocalSpace(coord);
     if (!InSliceBoundsLocal(local.x, local.y, local.z)) {
         throw new UnityException("Can't modify tile outside of slice");
     }
     tilesPresent[PresentIndex(local.x, local.y, local.z)] = true;
     tiles[local.x, local.y, local.z].Modify(tileType, material, base_material, layer_material, vein_material, waterLevel, magmaLevel, construction_item, rampType);
 }
Beispiel #46
0
 /// <summary>
 /// This is the function that actually decides what mesh and texture each tile gets
 /// </summary>
 /// <param name="buffer">Buffer to put the chosen meshes into for combining</param>
 /// <param name="layer">layer currently being worked on</param>
 /// <param name="tile">The tile to get all the needed info from.</param>
 void FillMeshBuffer(out MeshCombineUtility.MeshInstance buffer, MeshLayer layer, MapDataStore.Tile tile)
 {
     buffer = new MeshCombineUtility.MeshInstance();
     MeshContent mesh = null;
     if (tile.hidden)
     {
         buffer.meshData = null;
         return;
     }
     if (layer == MeshLayer.BuildingMaterial
         || layer == MeshLayer.BuildingMaterialCutout
         || layer == MeshLayer.NoMaterialBuilding
         || layer == MeshLayer.NoMaterialBuildingCutout
         || layer == MeshLayer.BuildingMaterialTransparent
         || layer == MeshLayer.NoMaterialBuildingTransparent
         )
     {
         if(tile.buildingType == default(BuildingStruct))
         {
             buffer.meshData = null;
             return;
         }
         if (!contentLoader.BuildingMeshConfiguration.GetValue(tile, layer, out mesh))
         {
             buffer.meshData = null;
             return;
         }
     }
     else
     {
         if (!contentLoader.TileMeshConfiguration.GetValue(tile, layer, out mesh))
         {
             buffer.meshData = null;
             return;
         }
     }
     buffer.meshData = mesh.MeshData[(int)layer];
     buffer.transform = Matrix4x4.TRS(GameMap.DFtoUnityCoord(tile.position), mesh.GetRotation(tile), Vector3.one);
     Matrix4x4 shapeTextTransform = Matrix4x4.identity;
     NormalContent tileTexContent;
     if (mesh.NormalTexture == null)
     {
         if (layer == MeshLayer.BuildingMaterial
             || layer == MeshLayer.BuildingMaterialCutout
             || layer == MeshLayer.NoMaterialBuilding
             || layer == MeshLayer.NoMaterialBuildingCutout
             || layer == MeshLayer.BuildingMaterialTransparent
             || layer == MeshLayer.NoMaterialBuildingTransparent
             )
         {
             if (contentLoader.BuildingShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                 shapeTextTransform = tileTexContent.UVTransform;
         }
         else
         {
             if (contentLoader.ShapeTextureConfiguration.GetValue(tile, layer, out tileTexContent))
                 shapeTextTransform = tileTexContent.UVTransform;
         }
     }
     else
     {
         shapeTextTransform = mesh.NormalTexture.UVTransform;
     }
     Matrix4x4 matTexTransform = Matrix4x4.identity;
     TextureContent matTexContent;
     if (contentLoader.MaterialTextureConfiguration.GetValue(tile, layer, out matTexContent))
         matTexTransform = matTexContent.UVTransform;
     ColorContent newColorContent;
     Color newColor;
     if (contentLoader.ColorConfiguration.GetValue(tile, layer, out newColorContent))
     {
         newColor = newColorContent.value;
     }
     else
     {
         MatPairStruct mat = new MatPairStruct(-1, -1);
         switch (layer)
         {
             case MeshLayer.StaticMaterial:
             case MeshLayer.StaticCutout:
             case MeshLayer.StaticTransparent:
                 mat = tile.material;
                 break;
             case MeshLayer.BaseMaterial:
             case MeshLayer.BaseCutout:
             case MeshLayer.BaseTransparent:
                 mat = tile.base_material;
                 break;
             case MeshLayer.LayerMaterial:
             case MeshLayer.LayerCutout:
             case MeshLayer.LayerTransparent:
                 mat = tile.layer_material;
                 break;
             case MeshLayer.VeinMaterial:
             case MeshLayer.VeinCutout:
             case MeshLayer.VeinTransparent:
                 mat = tile.vein_material;
                 break;
             case MeshLayer.NoMaterial:
             case MeshLayer.NoMaterialCutout:
             case MeshLayer.NoMaterialBuildingCutout:
             case MeshLayer.NoMaterialBuilding:
             case MeshLayer.NoMaterialBuildingTransparent:
             case MeshLayer.NoMaterialTransparent:
                 break;
             case MeshLayer.Growth0Cutout:
                 break;
             case MeshLayer.Growth1Cutout:
                 break;
             case MeshLayer.Growth2Cutout:
                 break;
             case MeshLayer.Growth3Cutout:
                 break;
             case MeshLayer.BuildingMaterial:
             case MeshLayer.BuildingMaterialCutout:
             case MeshLayer.BuildingMaterialTransparent:
                 mat = tile.buildingMaterial;
                 break;
             default:
                 break;
         }
         MaterialDefinition mattie;
         if (materials.TryGetValue(mat, out mattie))
         {
             ColorDefinition color = mattie.state_color;
             if (color == null)
                 newColor = Color.cyan;
             else
                 newColor = new Color(color.red / 255.0f, color.green / 255.0f, color.blue / 255.0f, 1);
         }
         else
         {
             newColor = Color.grey;
         }
     }
     buffer.color = newColor;
     buffer.uv1Transform = matTexTransform;
     buffer.uv2Transform = shapeTextTransform;
     buffer.hiddenFaces = MeshCombineUtility.HiddenFaces.None;
     if (tile.North != null && tile.North.isWall)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.North;
     if (tile.South != null && tile.South.isWall)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.South;
     if (tile.East != null && tile.East.isWall)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.East;
     if (tile.West != null && tile.West.isWall)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.West;
     if (tile.Up != null && tile.Up.isSolidBase)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.Up;
     if (tile.Down != null && tile.Down.isWall)
         buffer.hiddenFaces |= MeshCombineUtility.HiddenFaces.Down;
 }
 public void Modify(int? tileType = null,
                    MatPairStruct? material = null,
                    MatPairStruct? base_material = null,
                    MatPairStruct? layer_material = null,
                    MatPairStruct? vein_material = null,
                    int? waterLevel = null,
                    int? magmaLevel = null,
                    MatPairStruct? construction_item = null,
                    int? rampType = null)
 {
     if (tileType != null) {
         this.tileType = tileType.Value;
     }
     if (material != null) {
         this.material = material.Value;
     }
     if (base_material != null) {
         this.base_material = base_material.Value;
     }
     if (layer_material != null) {
         this.layer_material = layer_material.Value;
     }
     if (vein_material != null) {
         this.vein_material = vein_material.Value;
     }
     if (waterLevel != null) {
         this.waterLevel = waterLevel.Value;
     }
     if (magmaLevel != null) {
         this.magmaLevel = magmaLevel.Value;
     }
     if (construction_item != null)
     {
         this.construction_item = construction_item.Value;
     }
     if(rampType != null)
     {
         this.rampType = rampType.Value;
     }
 }
Beispiel #48
0
 void Count(Dictionary<MatPairStruct, int> dict, MatPairStruct value)
 {
     if (!dict.ContainsKey(value))
         dict[value] = 1;
     else
         dict[value] = dict[value] + 1;
 }