/// <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;
        }
Beispiel #3
0
        //--------------------//

        #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);
        }
Beispiel #4
0
        //--------------------//

        #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();
        }
    }