in my little concept im making theres a colony(big dot) that spawns spores(small dots)
the spores also make a couple of spores, then go sterile so they don’t create spores infinitely.
In my picture you can see the spores are stacking up, so my sphere casting and detection code must be wrong. but i cant see why. Can anyone see whats going wrong?
(my colony and spores all have colliders the same size as the mesh, with trigger not ticked)
#pragma strict
var growthCount = 0;
var growthCountMax: int;
var newSpore: GameObject;
var randomDir: Vector3;
var hit: RaycastHit;
var spawnDistMaster: float;
var spawnDist: float;
var spawnDistNoise: float;
var newSporePos: Vector3;
var sporeWidth: float;
var tries = 0;
var clone: GameObject;
var fitTries = 0;
var fitTriesMax = 4;
var sporeSpawnTimeMaster: float;
var sporeSpawnTime: float;
var sporeSpawnTimeNoise: float;
var sterile = false;
function Start ()
{
sporeSpawnTime = Time.time + sporeSpawnTimeMaster + Random.Range(0, sporeSpawnTimeNoise);
}
function Update ()
{
if (Time.time > sporeSpawnTime && !sterile) //make spore (random timer)
{
sporeSpawnTime = Time.time + sporeSpawnTimeMaster + Random.Range(0, sporeSpawnTimeNoise);
lookForGrowSpot();
}
}
function incGrowthCount()
{
growthCount++;
if(growthCount >= growthCountMax)
sterilize();
}
function lookForGrowSpot()
{
tries = 0;
while(tries < 500)//try to spawn 500 random directions/distances
{
spawnDist = spawnDistMaster + Random.Range(-spawnDistNoise, spawnDistNoise);
randomDir = Quaternion.Euler(0, Random.Range(0, 360), 0) * Vector3.forward;
Debug.DrawRay(transform.position, randomDir, Color.cyan);
if(!Physics.SphereCast(transform.position, sporeWidth, randomDir, hit, spawnDist))
{//if the spherecast didnt detect any colliders in the way...
Debug.Log("Hit Nothing");
newSporePos = transform.position + spawnDist * randomDir;
grow();
incGrowthCount();
return true;
}
tries++;
}
Debug.Log("Couldnt Fit");//if it fails to find an opening 500 times(beacuse its surrounded)
fitTries++;
if(fitTries >= fitTriesMax)// the spore can fail the fitting loop 4 times before it is sterilized
{
sterilize();//spore stops trying to spawn
}
return false;
}
function grow()
{
clone = Instantiate (newSpore, newSporePos, transform.rotation);
clone.SendMessage("incGrowthCount");
//clone.SendMessage("updateSporeSpawnTimeMaster", Time.time);
}
function sterilize()
{
sterile = true;
}