123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /* INFINITY CODE */
- /* https://infinity-code.com */
- using System.Collections.Generic;
- using InfinityCode.RealWorldTerrain.Net;
- using InfinityCode.RealWorldTerrain.Windows;
- using UnityEngine;
- namespace InfinityCode.RealWorldTerrain.Phases
- {
- public abstract class RealWorldTerrainPhase
- {
- public static float phaseProgress;
- public static bool phaseComplete;
- public static int index;
- public static RealWorldTerrainPhase activePhase;
- public static int activePhaseIndex;
- public static List<RealWorldTerrainPhase> requiredPhases;
- protected static bool generateInThread
- {
- get { return RealWorldTerrainWindow.generateInThread; }
- }
- protected static bool isCapturing
- {
- get { return RealWorldTerrainWindow.isCapturing; }
- set { RealWorldTerrainWindow.isCapturing = value; }
- }
- protected static RealWorldTerrainPrefs prefs
- {
- get { return RealWorldTerrainWindow.prefs; }
- }
- public static float progress
- {
- get { return RealWorldTerrainWindow.progress; }
- set
- {
- RealWorldTerrainWindow.progress = value;
- if (RealWorldTerrainWindow.wnd != null) RealWorldTerrainWindow.wnd.Repaint();
- }
- }
- protected static RealWorldTerrainVector2i terrainCount
- {
- get { return prefs.terrainCount; }
- }
- protected static RealWorldTerrainItem[,] terrains
- {
- get { return RealWorldTerrainWindow.terrains; }
- }
- protected static RealWorldTerrainVector2i textureCount
- {
- get { return prefs.textureCount; }
- }
- public abstract string title { get; }
- public virtual void Complete()
- {
- phaseProgress = 0;
- phaseComplete = false;
- index = 0;
- NextPhase();
- }
- public abstract void Enter();
- public virtual void Finish()
- {
-
- }
- public static void Init()
- {
- requiredPhases = new List<RealWorldTerrainPhase>();
- activePhaseIndex = -1;
- if (RealWorldTerrainDownloadManager.count > 0) requiredPhases.Add(new RealWorldTerrainDownloadingPhase());
- bool gFull = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.full;
- bool gTerrain = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.terrain;
- bool gTexture = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.texture;
- bool gAdditional = RealWorldTerrainWindow.generateType == RealWorldTerrainGenerateType.additional;
- bool gGaia = gFull && prefs.resultType == RealWorldTerrainResultType.gaiaStamp;
- bool gRaw = gFull && prefs.resultType == RealWorldTerrainResultType.rawFile;
- bool isHeightmapOnly = gGaia || gRaw;
- bool nLoadHeightmap = !gTexture;
- bool nGenHeightmap = gFull || gTerrain;
- bool nTexture = (gFull || gTexture) && prefs.generateTextures;
- bool nAdditional = gFull || gAdditional;
- if (isHeightmapOnly)
- {
- nGenHeightmap = false;
- nTexture = false;
- nAdditional = false;
- }
- if (nLoadHeightmap)
- {
- requiredPhases.Add(new RealWorldTerrainUnzipHeightmapPhase());
- requiredPhases.Add(new RealWorldTerrainLoadHeightmapPhase());
- }
- if (!isHeightmapOnly)
- {
- if (gFull) requiredPhases.Add(new RealWorldTerrainGenerateTerrainsPhase());
- else requiredPhases.Add(new RealWorldTerrainLoadTerrainsPhase());
- }
- if (nGenHeightmap)
- {
- if (prefs.resultType == RealWorldTerrainResultType.terrain)
- {
- requiredPhases.Add(new RealWorldTerrainGenerateHeightmapsPhase());
- if (prefs.terrainCount > 1) requiredPhases.Add(new RealWorldTerrainAdjustEdgesPhase());
- }
- else if (prefs.resultType == RealWorldTerrainResultType.mesh)
- {
- requiredPhases.Add(new RealWorldTerrainGenerateMeshVerticesPhase());
- requiredPhases.Add(new RealWorldTerrainGenerateMeshesPhase());
- requiredPhases.Add(new RealWorldTerrainInstantiateMeshesPhase());
- }
- }
- #if GAIA_PRESENT || GAIA_PRO_PRESENT || GAIA_2_PRESENT
- if (gGaia) requiredPhases.Add(new RealWorldTerrainGenerateGaiaStampPhase());
- #endif
- if (gRaw) requiredPhases.Add(new RealWorldTerrainGenerateRAWPhase());
- if (nTexture) requiredPhases.Add(new RealWorldTerrainGenerateTexturesPhase());
- if (nAdditional)
- {
- if (prefs.generateBuildings)
- {
- requiredPhases.Add(new RealWorldTerrainGenerateBuildingsPhase());
- if (prefs.buildingGenerator == 0 && prefs.buildingSaveInResult) requiredPhases.Add(new RealWorldTerrainSaveBuildingsPhase());
- }
- if (prefs.generateRoads) requiredPhases.Add(new RealWorldTerrainGenerateRoadsPhase());
- if (prefs.generateGrass) requiredPhases.Add(new RealWorldTerrainGenerateGrassPhase());
- if (prefs.generateTrees) requiredPhases.Add(new RealWorldTerrainGenerateTreesPhase());
- if (prefs.generateRivers) requiredPhases.Add(new RealWorldTerrainGenerateRiversPhase());
- }
- requiredPhases.Add(new RealWorldTerrainFinishPhase());
- activePhase = null;
- RealWorldTerrainImporter.showMessage = false;
- NextPhase();
- }
- public static void NextPhase()
- {
- if (activePhase != null) activePhase.Finish();
- activePhaseIndex++;
- if (requiredPhases == null || activePhaseIndex >= requiredPhases.Count)
- {
- Debug.Log("No active phase");
- activePhase = null;
- RealWorldTerrainWindow.Dispose();
- return;
- }
- activePhase = requiredPhases[activePhaseIndex];
- RealWorldTerrainWindowUI.phasetitle = activePhase.title;
- progress = 0;
- RealWorldTerrainWindow.wnd.Repaint();
- activePhase.Start();
- }
- public virtual void Start()
- {
- }
- }
- }
|