void OnEnable() { shapeChangedSinceLastRepaint = true; shapeCreator = target as CreatureSpawnzones; selectionInfo = new SelectionInfo(); Undo.undoRedoPerformed += OnUndoOrRedo; Tools.hidden = true; }
public void Spawn(Creature creature, int amount = 1) { float creatureTotalArea = 0f; for (int i = 0; i < creatureSpawnzones.Count; i++) { if (creatureSpawnzones[i].creature == creature) { creatureTotalArea += creatureSpawnzones[i].totalArea; // No break as there can be multiple creatureSpawnzones for the same creature } } for (int c = 0; c < amount; c++) { float pickedArea = (Random.value * creatureTotalArea); float currentArea = 0f; for (int i = 0; i < creatureSpawnzones.Count; i++) { for (int j = 0; j < creatureSpawnzones[i].areas.Length; j++) { currentArea += creatureSpawnzones[i].areas[j]; if (currentArea >= pickedArea) { Vector2 ab = creatureSpawnzones[i].polygonPoints[creatureSpawnzones[i].polygonTriangles[(j * 3) + 1]] - creatureSpawnzones[i].polygonPoints[creatureSpawnzones[i].polygonTriangles[j * 3]]; Vector2 ac = creatureSpawnzones[i].polygonPoints[creatureSpawnzones[i].polygonTriangles[(j * 3) + 2]] - creatureSpawnzones[i].polygonPoints[creatureSpawnzones[i].polygonTriangles[j * 3]]; float pickedMultiplierSumTotal = Random.value; float pickedLengthAB = (pickedMultiplierSumTotal * Random.value); float pickedLengthAC = (pickedMultiplierSumTotal - pickedLengthAB); Vector2 pickedPoint = (creatureSpawnzones[i].polygonPoints[creatureSpawnzones[i].polygonTriangles[j * 3]] + (ab * pickedLengthAB + ac * pickedLengthAC)); Entity entity = GameObject.Instantiate(creature.prefab, new Vector3(pickedPoint.x, CreatureSpawnzones.GetHeight(pickedPoint.x, pickedPoint.y), pickedPoint.y), Quaternion.identity, transform).GetComponent <Entity>(); entity.creature = creature; if (allSpawnedEntities.ContainsKey(creature)) { allSpawnedEntities[creature].Add(entity); } else { allSpawnedEntities.Add(creature, new List <Entity>() { entity }); } break; } } } } }