// 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); } }