|
|
@@ -142,16 +142,33 @@ public class SceneSetup : MonoBehaviour
|
|
|
// Create Trees in forest-like clusters
|
|
|
CreateForests();
|
|
|
|
|
|
- // Create Stones
|
|
|
- for (int i = 0; i < numberOfStones; i++)
|
|
|
+ // Create Stones in clusters
|
|
|
+ int numStoneClusters = Random.Range(2, 4); // 2-3 stone clusters
|
|
|
+
|
|
|
+ for (int cluster = 0; cluster < numStoneClusters; cluster++)
|
|
|
{
|
|
|
- Vector3 position = GetRandomPosition();
|
|
|
- CreateStone(position, i);
|
|
|
+ Vector3 clusterCenter = GetRandomPosition();
|
|
|
+
|
|
|
+ // Create 3-5 stones in this cluster
|
|
|
+ int stonesInCluster = Random.Range(3, 6);
|
|
|
+
|
|
|
+ for (int i = 0; i < stonesInCluster; i++)
|
|
|
+ {
|
|
|
+ Vector3 offset = Random.insideUnitSphere * 3f; // 3 unit radius for tighter clusters
|
|
|
+ offset.y = 0;
|
|
|
+
|
|
|
+ Vector3 stonePosition = clusterCenter + offset;
|
|
|
+ stonePosition.x = Mathf.Clamp(stonePosition.x, -resourceSpawnRadius + 2, resourceSpawnRadius - 2);
|
|
|
+ stonePosition.z = Mathf.Clamp(stonePosition.z, -resourceSpawnRadius + 2, resourceSpawnRadius - 2);
|
|
|
+
|
|
|
+ CreateStone(stonePosition, cluster * 10 + i);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ Debug.Log($"Created {numStoneClusters} stone clusters");
|
|
|
+
|
|
|
// No longer create pre-made farms - farmhouses will be built by players
|
|
|
}
|
|
|
-
|
|
|
void CreateTree(Vector3 position, int index)
|
|
|
{
|
|
|
GameObject tree = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
|
|
|
@@ -164,9 +181,10 @@ public class SceneSetup : MonoBehaviour
|
|
|
ResourceNode node = tree.AddComponent<ResourceNode>();
|
|
|
node.nodeType = ResourceNodeType.Tree;
|
|
|
node.resourceType = ResourceType.Wood;
|
|
|
- node.maxResources = 50;
|
|
|
- node.currentResources = 50;
|
|
|
- node.regenerationRate = 2f;
|
|
|
+ node.maxResources = Random.Range(40, 70); // Variable wood amounts
|
|
|
+ node.currentResources = node.maxResources;
|
|
|
+ node.regenerationRate = 0f; // Trees don't regenerate
|
|
|
+ node.nodeRenderer = tree.GetComponent<Renderer>();
|
|
|
|
|
|
// Apply material
|
|
|
if (treeMaterial != null)
|
|
|
@@ -186,34 +204,80 @@ public class SceneSetup : MonoBehaviour
|
|
|
|
|
|
void CreateStone(Vector3 position, int index)
|
|
|
{
|
|
|
- GameObject stone = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
|
|
- stone.name = $"Stone_{index + 1}";
|
|
|
- stone.tag = "Stone";
|
|
|
- stone.transform.position = position;
|
|
|
- stone.transform.localScale = Vector3.one * 1.5f;
|
|
|
+ // Create stone cluster with multiple rocks
|
|
|
+ GameObject stoneCluster = new GameObject($"StoneCluster_{index + 1}");
|
|
|
+ stoneCluster.tag = "Stone";
|
|
|
+ stoneCluster.transform.position = position;
|
|
|
+
|
|
|
+ // Main large stone with random size and position jitter
|
|
|
+ GameObject mainStone = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
|
|
+ mainStone.name = "MainStone";
|
|
|
+ mainStone.transform.SetParent(stoneCluster.transform);
|
|
|
+ mainStone.transform.localPosition = new Vector3(
|
|
|
+ Random.Range(-0.2f, 0.2f),
|
|
|
+ Random.Range(-0.1f, 0.1f),
|
|
|
+ Random.Range(-0.2f, 0.2f)
|
|
|
+ );
|
|
|
+ mainStone.transform.localScale = Vector3.one * Random.Range(1.3f, 1.8f);
|
|
|
+ mainStone.transform.rotation = Random.rotation;
|
|
|
+
|
|
|
+ // Add 2-5 smaller stones with more varied positioning
|
|
|
+ int smallStones = Random.Range(2, 6);
|
|
|
+ for (int i = 0; i < smallStones; i++)
|
|
|
+ {
|
|
|
+ GameObject smallStone = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
|
|
+ smallStone.name = $"SmallStone_{i}";
|
|
|
+ smallStone.transform.SetParent(stoneCluster.transform);
|
|
|
+
|
|
|
+ // More random angle distribution instead of even spacing
|
|
|
+ float angle = Random.Range(0f, 360f);
|
|
|
+ float distance = Random.Range(0.6f, 1.4f);
|
|
|
+ Vector3 offset = new Vector3(
|
|
|
+ Mathf.Cos(angle * Mathf.Deg2Rad) * distance,
|
|
|
+ Random.Range(-0.3f, 0.2f),
|
|
|
+ Mathf.Sin(angle * Mathf.Deg2Rad) * distance
|
|
|
+ );
|
|
|
+
|
|
|
+ smallStone.transform.localPosition = offset;
|
|
|
+ smallStone.transform.localScale = Vector3.one * Random.Range(0.5f, 1.1f);
|
|
|
+ smallStone.transform.rotation = Random.rotation;
|
|
|
+
|
|
|
+ // Remove collider so only parent cluster is selectable
|
|
|
+ Collider smallCollider = smallStone.GetComponent<Collider>();
|
|
|
+ if (smallCollider != null)
|
|
|
+ Destroy(smallCollider);
|
|
|
+
|
|
|
+ Renderer smallRenderer = smallStone.GetComponent<Renderer>();
|
|
|
+ if (stoneMaterial != null)
|
|
|
+ smallRenderer.material = stoneMaterial;
|
|
|
+ else
|
|
|
+ smallRenderer.material.color = Color.gray;
|
|
|
+ }
|
|
|
|
|
|
- // Add ResourceNode component
|
|
|
- ResourceNode node = stone.AddComponent<ResourceNode>();
|
|
|
+ // Add ResourceNode component to parent
|
|
|
+ ResourceNode node = stoneCluster.AddComponent<ResourceNode>();
|
|
|
node.nodeType = ResourceNodeType.Stone;
|
|
|
node.resourceType = ResourceType.Stone;
|
|
|
- node.maxResources = 75;
|
|
|
- node.currentResources = 75;
|
|
|
- node.regenerationRate = 0.5f;
|
|
|
+ node.maxResources = Random.Range(60, 100); // Variable stone amounts
|
|
|
+ node.currentResources = node.maxResources;
|
|
|
+ node.regenerationRate = 0f; // Stones don't regenerate
|
|
|
+ node.nodeRenderer = mainStone.GetComponent<Renderer>();
|
|
|
|
|
|
- // Apply material
|
|
|
+ // Set material
|
|
|
if (stoneMaterial != null)
|
|
|
- {
|
|
|
- stone.GetComponent<Renderer>().material = stoneMaterial;
|
|
|
- }
|
|
|
+ node.nodeRenderer.material = stoneMaterial;
|
|
|
else
|
|
|
- {
|
|
|
- stone.GetComponent<Renderer>().material.color = Color.gray;
|
|
|
- }
|
|
|
+ node.nodeRenderer.material.color = Color.gray;
|
|
|
+
|
|
|
+ // Add collider to parent for clicking
|
|
|
+ BoxCollider clusterCollider = stoneCluster.AddComponent<BoxCollider>();
|
|
|
+ clusterCollider.size = new Vector3(3f, 2f, 3f);
|
|
|
+ clusterCollider.center = Vector3.up * 0.5f;
|
|
|
|
|
|
// Create selection indicator
|
|
|
- CreateSelectionIndicator(stone, node);
|
|
|
+ CreateSelectionIndicator(stoneCluster, node);
|
|
|
|
|
|
- Debug.Log($"Created Stone at {position}");
|
|
|
+ Debug.Log($"Created Stone Cluster at {position} with {node.maxResources} stone");
|
|
|
}
|
|
|
|
|
|
void CreateFarm(Vector3 position, int index)
|