/// <summary> /// Called when the user wants a new <see cref="TerrainTemplate"/> to be added. /// </summary> protected override void OnNewTemplate() { string newName = InputBox.Show(this, "Terrain Template Name", Resources.EnterTemplateName); #region Error handling if (string.IsNullOrEmpty(newName)) { return; } if (Templates.Contains(newName)) { Msg.Inform(this, Resources.NameInUse, MsgSeverity.Warn); return; } #endregion var itemClass = new TerrainTemplate { Name = newName }; Templates.Add(itemClass); OnChange(); OnUpdate(); // Select the new entry TemplateList.SelectedEntry = itemClass; }
//--------------------// #region Handlers /// <inheritdoc/> protected override void OnInitialize() { EntityTemplate.LoadAll(); ItemTemplate.LoadAll(); TerrainTemplate.LoadAll(); // Create an empty testing universe with a plain terrain _universe = new Universe(new Terrain <TerrainTemplate>(new TerrainSize(27, 27, 30, 30))) { LightPhase = 1 }; base.OnInitialize(); // Initialize engine renderPanel.Setup(); // Activate some effects renderPanel.Engine.Anisotropic = true; renderPanel.Engine.Effects.PerPixelLighting = true; renderPanel.Engine.Effects.NormalMapping = checkNormalMapping.Checked; renderPanel.Engine.Effects.PostScreenEffects = true; renderPanel.Engine.Effects.WaterEffects = WaterEffectsType.ReflectAll; propertyGridUniverse.SelectedObject = _universe; }
//--------------------// #region Initialize /// <inheritdoc/> protected override bool Initialize() { // Run the predefined init-steps first if (!base.Initialize()) { return(false); } // Settings update hooks Settings.Current.General.Changed += Program.UpdateLocale; Settings.Current.Controls.Changed += ApplyControlsSettings; Settings.Current.Display.Changed += ResetEngine; Settings.Current.Graphics.Changed += ApplyGraphicsSettings; Settings.Current.Sound.Changed += ApplySoundSettings; UpdateStatus(Resources.LoadingGraphics); Form.ResizeEnd += delegate { if (!Settings.Current.Display.Fullscreen) { Settings.Current.Display.WindowSize = Form.ClientSize; } }; using (new TimedLogEvent("Initialize GUI")) { // Initialize GUI subsystem GuiManager = new GuiManager(Engine); Form.WindowMessage += GuiManager.OnMsgProc; } using (new TimedLogEvent("Load graphics")) { EntityTemplate.LoadAll(); ItemTemplate.LoadAll(); TerrainTemplate.LoadAll(); // Handle command-line arguments if (Program.Args.Contains("map") && !string.IsNullOrEmpty(Program.Args["map"])) { // Load command-line map LoadMap(Program.Args["map"]); } else if (Program.Args.Contains("modify") && !string.IsNullOrEmpty(Program.Args["modify"])) { // Load command-line map for modification ModifyMap(Program.Args["modify"]); } else if (Program.Args.Contains("benchmark")) { // Run automatic benchmark StartBenchmark(); } else { // Load main menu PreloadPreviousSession(); LoadMenu(Program.Args.Contains("menu") ? Program.Args["menu"] : GetMenuMap()); } } return(true); }
//--------------------// #region Handlers /// <inheritdoc/> protected override void OnInitialize() { // Load template lists before touching any map files EntityTemplate.LoadAll(); ItemTemplate.LoadAll(); TerrainTemplate.LoadAll(); #region File handling if (Path.IsPathRooted(FilePath)) { _fullPath = FilePath; if (!_overwrite && File.Exists(_fullPath)) { // Load existing file Log.Info("Load file: " + _fullPath); _universe = Universe.Load(_fullPath); } else { // Create new file Log.Info("Create file: " + _fullPath); _universe = new Universe(new Terrain <TerrainTemplate>(TerrainSizeDialog.Create())); _universe.Save(_fullPath); } } else { // File name only? Might not save to same dir loaded from! Log.Info("Load file: " + FilePath); try { _universe = Universe.FromContent(FilePath); } #region Error handling catch (ZipException ex) { // Wrap exception since only certain exception types are allowed throw new InvalidDataException(ex.Message, ex); } #endregion _fullPath = ContentManager.CreateFilePath("World/Maps", FilePath); } #endregion // Initialize engine renderPanel.Setup(); base.OnInitialize(); }
// Update is called once per frame void Update() { if (Vector3.Distance(playerObject.transform.position, transform.position) < generationDistance) { Generate(); } if (currentlyLoadedTemplates.Count > 0) { TerrainTemplate t = currentlyLoadedTemplates[0]; if (Vector3.Distance(playerObject.transform.position, t.gameObject.transform.position) > generationDistance) { currentlyLoadedTemplates.RemoveAt(0); Destroy(t.gameObject); } } }
// generates one segment void Generate() { // choose random segment // get templates frow buffer, while discarding null templates TerrainTemplate template = null; while (template == null) { if (buffer.Count == 0) { // get new templates GetComponent <Animator>().SetTrigger("transit"); GetComponent <Animator>().SetFloat("random", Random.Range(0f, 1f)); return; } int i = Random.Range(0, buffer.Count); template = buffer[i]; buffer.RemoveAt(i); } GameObject prefab = template.gameObject; // instantiate at current position GameObject instance = Instantiate(prefab, transform.position, transform.rotation, //transform.rotation, terrainContainer.transform ); GameObject exitObj = instance.GetComponent <TerrainTemplate>().exitMarker; GameObject entranceObj = instance.GetComponent <TerrainTemplate>().entranceMarker; // adjust the instance's rotation for entrance rotation instance.transform.rotation = instance.transform.rotation * Quaternion.Inverse(entranceObj.transform.localRotation); // adjust the instance's position for entrance position instance.transform.position = instance.transform.position + (transform.position - entranceObj.transform.position); // set position and rotation of generator to exit transform.position = exitObj.transform.position; transform.rotation = exitObj.transform.rotation; // deactivate exit and entrance objects exitObj.SetActive(false); entranceObj.SetActive(false); // add to the loaded templates currentlyLoadedTemplates.Add(instance.GetComponent <TerrainTemplate>()); // increase counter templatesGenerated++; // handle events eventSpawnCountdown--; if (eventSpawnCountdown <= 0) { eventSpawnCountdown = Random.Range(minTemplatesBetweenEvents, maxTemplatesBetweenEvents + 1); // spawn event instance.GetComponent <TerrainTemplate>().SpawnEvent(); } }