/* * Generates a static scene object line (a sidewalk, a road, a grass block...) */ void GenerateStaticSceneObjectLine(SceneStaticObjectType type) { float capacity = settings.GameRightBoundary - Constants.PathSizeX; int crosswalkGenerationCapacity = settings.crosswalkDensity; while (pointer.x <= capacity) { // Spawn a crosswalk if the scene object type is road if (type == SceneStaticObjectType.Road || type == SceneStaticObjectType.Crosswalk) { if (crosswalkGenerationCapacity > 0 && Random.value < Constants.ProbabilityMedium && IsInPlayableArea(pointer)) { type = SceneStaticObjectType.Crosswalk; crosswalkGenerationCapacity -= 1; } else { type = SceneStaticObjectType.Road; } } GenerateStaticSceneObject(type); // Creates new scene object } // Resets pointer pointer.x = settings.GameLeftBoundary; pointer.z += GetSceneObjectZ(type); }
Material GetOffGameAreaMaterial(SceneStaticObjectType type) { switch (type) { case SceneStaticObjectType.Sidewalk: return(mOffGameAreaSidewalk); case SceneStaticObjectType.Grass: return(mOffGameAreaGrass); default: return(mOffGameAreaSidewalk); } }
/* * Generates a dynamic scene object (a sidewalk, a road, a grass block...) */ GameObject GenerateDynamicSceneObject(SceneStaticObjectType type) { GameObject prefab = GetGameObjectByType(type); GameObject dummy = Instantiate(prefab) as GameObject; dummy.name = prefab.name; dummy.transform.position = pointer; dummy.transform.parent = GameObject.Find(settings.sceneObjectsNodeName).transform; // Change new object parent // changes object material to differentiate game area from off zone if (!IsInPlayableArea(pointer)) { dummy.GetComponentInChildren <Renderer>().material = GetOffGameAreaMaterial(type); } pointer.x += GetSceneObjectX(type); // Jumps pointer to next element return(dummy); }
/* * Translates a scene object type into a game object prefab */ GameObject GetGameObjectByType(SceneStaticObjectType type) { switch (type) { case SceneStaticObjectType.Crosswalk: return(pfCrosswalk); case SceneStaticObjectType.Road: return(pfRoad); case SceneStaticObjectType.Sidewalk: return(pfSidewalk); case SceneStaticObjectType.Grass: return(pfGrass); default: return(null); } }
float GetSceneObjectX(SceneStaticObjectType type) { switch (type) { case SceneStaticObjectType.Crosswalk: return(Constants.CrosswalkSizeX); case SceneStaticObjectType.Road: return(Constants.RoadSizeX); case SceneStaticObjectType.Sidewalk: return(Constants.PathSizeX); case SceneStaticObjectType.Grass: return(Constants.PathSizeX); default: return(0); } }