示例#1
0
        // returns true if there is still space on the platform for a collidable object to spawn
        private void SpawnCollidable(ObjectType objectType, Vector3 position, Vector3 direction, ObjectLocation location, PlatformObject platform, int platformLocalIndex, bool activateImmediately)
        {
            int collidablePositions = platform.collidablePositions;

            // can't do anything if the platform doesn't accept any collidable object spawns
            if (collidablePositions == 0)
            {
                return;
            }

            Vector3 offset = platformSizes[platformLocalIndex] * 0.1f;
            float   zDelta = platformSizes[platformLocalIndex].z * .8f / (1 + collidablePositions);

            for (int i = 0; i < collidablePositions; ++i)
            {
                if (platform.CanSpawnCollidable(i))
                {
                    spawnData.slotPositions = platform.GetSlotsAvailable();
                    int localIndex = infiniteObjectManager.GetNextObjectIndex(objectType, spawnData);
                    if (localIndex != -1)
                    {
                        CollidableObject collidable   = infiniteObjectManager.ObjectFromPool(localIndex, objectType) as CollidableObject;
                        Quaternion       lookRotation = Quaternion.LookRotation(direction);
                        Vector3          spawnSlot    = collidable.GetSpawnSlot(platform.GetTransform().right *slotDistance, spawnData.slotPositions);
                        collidable.Orient(platform, position + (offset.z + ((i + 1) * zDelta)) * direction + spawnSlot, lookRotation);
                        if (activateImmediately)
                        {
                            collidable.Activate();
                        }

                        int objectIndex = infiniteObjectManager.LocalIndexToObjectIndex(localIndex, objectType);
                        infiniteObjectHistory.ObjectSpawned(objectIndex, (offset.z + ((i + 1) * zDelta)), location, lookRotation.eulerAngles.y, objectType);
                        platform.CollidableSpawned(i);

                        // don't allow any more of the same collidable type if we are forcing a different collidable
                        if (platform.forceDifferentCollidableTypes)
                        {
                            break;
                        }
                    }
                }
            }
            spawnData.slotPositions = 0;
        }