2024-11-19 11:48:21 +01:00

183 lines
5.5 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace RoadArchitect
{
[System.Serializable]
public class TerrainHistoryMaker
{
#region "Vars"
public int terrainID;
public int heightmapResolution;
//Heights:
public int[] x1;
public int[] y1;
public float[] height;
public int Count;
//Details:
public int detailLayersCount;
public int[] detailsCount;
public int[] detailsX;
public int[] detailsY;
public int[] detailsOldValue;
//Trees:
public TerrainTreeInstance[] oldTrees;
public int treesCount;
#endregion
public void Nullify()
{
//Heights:
x1 = null;
y1 = null;
height = null;
detailsX = null;
detailsY = null;
detailsOldValue = null;
detailsCount = null;
//Trees:
oldTrees = null;
}
[System.Serializable]
public class TerrainTreeInstance
{
public float colorR;
public float colorG;
public float colorB;
public float colorA;
public float heightScale;
public float lightmapColorR;
public float lightmapColorG;
public float lightmapColorB;
public float lightmapColorA;
public float positionX;
public float positionY;
public float positionZ;
public int prototypeIndex;
public float widthScale;
// 4 bytes for int and float
//56 Bytes
}
/// <summary> Stores _trees into oldTrees </summary>
public void MakeRATrees(ref List<TreeInstance> _trees)
{
int tSize = _trees.Count;
oldTrees = new TerrainTreeInstance[tSize];
TerrainTreeInstance tTree = null;
TreeInstance xTree;
for (int index = 0; index < tSize; index++)
{
xTree = _trees[index];
tTree = new TerrainTreeInstance();
tTree.colorR = xTree.color.r;
tTree.colorG = xTree.color.g;
tTree.colorB = xTree.color.b;
tTree.colorA = xTree.color.a;
tTree.heightScale = xTree.heightScale;
tTree.lightmapColorR = xTree.lightmapColor.r;
tTree.lightmapColorG = xTree.lightmapColor.g;
tTree.lightmapColorB = xTree.lightmapColor.b;
tTree.lightmapColorA = xTree.lightmapColor.a;
tTree.positionX = xTree.position.x;
tTree.positionY = xTree.position.y;
tTree.positionZ = xTree.position.z;
tTree.prototypeIndex = xTree.prototypeIndex;
tTree.widthScale = xTree.widthScale;
oldTrees[index] = tTree;
}
}
/// <summary> Returns a new tree array copy of oldTrees </summary>
public TreeInstance[] MakeTrees()
{
if (oldTrees == null || oldTrees.Length < 1)
{
return null;
}
int tSize = oldTrees.Length;
TreeInstance[] tTrees = new TreeInstance[tSize];
TerrainTreeInstance tTree = null;
TreeInstance xTree;
for (int index = 0; index < tSize; index++)
{
tTree = oldTrees[index];
xTree = new TreeInstance();
xTree.color = new Color(tTree.colorR, tTree.colorG, tTree.colorB, tTree.colorA);
xTree.heightScale = tTree.heightScale;
xTree.lightmapColor = new Color(tTree.lightmapColorR, tTree.lightmapColorG, tTree.lightmapColorB, tTree.lightmapColorA);
xTree.position = new Vector3(tTree.positionX, tTree.positionY, tTree.positionZ);
xTree.prototypeIndex = tTree.prototypeIndex;
xTree.widthScale = tTree.widthScale;
tTrees[index] = xTree;
}
return tTrees;
}
/// <summary> Returns size of this terrain history </summary>
public int GetSize()
{
int tSize = 4;
if (x1 != null)
{
tSize += (x1.Length * 4);
tSize += 20;
}
if (y1 != null)
{
tSize += (y1.Length * 4);
tSize += 20;
}
if (height != null)
{
tSize += (height.Length * 4);
tSize += 20;
}
tSize += 4;
tSize += 1;
//Details:
tSize += 4;
if (detailsX != null)
{
tSize += (detailsX.Length * 4);
tSize += 20;
}
if (detailsY != null)
{
tSize += (detailsY.Length * 4);
tSize += 20;
}
if (detailsOldValue != null)
{
tSize += (detailsOldValue.Length * 4);
tSize += 20;
}
if (detailsCount != null)
{
tSize += (detailsCount.Length * 4);
tSize += 20;
}
tSize += 1;
//Trees:
if (oldTrees != null)
{
tSize += (oldTrees.Length * 56);
tSize += 20;
}
tSize += 4;
tSize += 1;
tSize += 1;
return tSize;
}
}
}