Пример #1
0
 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;
                    }
                }
            }
        }
    }