Exemplo n.º 1
0
    // Move all of the active objects
    public void MoveObjects(float moveDistance)
    {
        if (moveDistance == 0)
        {
            return;
        }
        // The distance vector to move the objects
        Vector3 delta = moveDirection * moveDistance;

        // Only move the top most platform/scene of each ObjectLocation because all of the other objects are children of these two
        // objects. Only have to check the bottom-most platform/scene as well to determine if it should be removed
        BasicObject currentObject   = null;
        Transform   objectTransform = null;

        for (int i = 0; i < 2; ++i)           // loop through the platform and scenes
        {
            bool isScene = i == 0;
            for (int j = 0; j < (int)Direction.Count; ++j)
            {
                // Move objects
                currentObject = ObjectHistory.instance.GetTopObject((Direction)j, isScene);
                if (currentObject != null)
                {
                    objectTransform = currentObject.GetTransform();
                    Vector3 pos = objectTransform.position;
                    pos -= delta;
                    objectTransform.position = pos;

                    // Check for removing bottom object if it is out of range
                    currentObject = ObjectHistory.instance.GetBottomObject((Direction)j, isScene);
                    if (playerTransform.InverseTransformPoint(currentObject.GetTransform().position).z < removeHorizon)
                    {
                        if (turnPlatform[j] == currentObject)
                        {
                            turnPlatform[j] = null;
                        }
                        ObjectHistory.instance.ObjectRemoved((Direction)j, isScene);
                        currentObject.Deactivate();
                    }
                }
            }

            // Move turn objects
            currentObject = ObjectHistory.instance.GetTopTurnObject(isScene);
            if (currentObject != null)
            {
                objectTransform = currentObject.GetTransform();
                Vector3 pos = objectTransform.position;
                pos -= delta;
                objectTransform.position = pos;

                currentObject = ObjectHistory.instance.GetBottomTurnObject(isScene);
                if (playerTransform.InverseTransformPoint(currentObject.GetTransform().position).z < removeHorizon)
                {
                    ObjectHistory.instance.TurnObjectRemoved(isScene);
                    currentObject.Deactivate();
                }
            }
        }

        if (!stopSpawning)
        {
            SpawnObjects(true);
        }
    }