/// <summary> /// Initializes the terrain materials and settings. /// </summary> public static void init(World world) { Instance = new UpvoidMinerWorldGenerator(); Instance.world = world; // Register all terrain resources (and thus terrain materials). TerrainResource.RegisterResources(world.Terrain); // Get handle to dirt for generation. Instance.terrainDirt = TerrainResource.FromName("Dirt"); Instance.terrainRock = TerrainResource.FromName("Stone.09"); Instance.terrainDesert = TerrainResource.FromName("Desert"); // load entities LoadEntities(); // init terrain world.SetTerrainGenerator(new TerrainGenerator()); world.TerrainGenerator.SetCsgNode(Instance.createTerrain()); }
/// <summary> /// This is called by the engine at mod startup and initializes the local part of the UpvoidMiner mod. /// </summary> public static void Startup(IntPtr _unmanagedModule) { // Get and save the resource domain of the mod, needed for loading resources. UpvoidMiner.Mod = Module.FromHandle(_unmanagedModule); UpvoidMiner.ModDomain = UpvoidMiner.Mod.ResourceDomain; // Get the world (created by the host script). world = Universe.GetWorldByName("UpvoidMinerWorld"); // No loading screen for clients (since the server generates the world) if (Scripting.IsHost) { // Register a callback for the terrain generation so the GUI can be notified when the world is ready. world.Terrain.AddVolumeUpdateCallback(VolumeCallback, false, 0, 4); // Show a splash screen in the GUI client. WebGui.DefaultUI.LoadURL("http://localhost:" + Webserver.DefaultWebserver.Port + "/Mods/Upvoid/UpvoidMiner/0.0.1/SplashScreen.html"); // Register a socket for sending progress updates to the loading screen generationProgressSocket = new WebSocketHandler(); Webserver.DefaultWebserver.RegisterWebSocketHandler(UpvoidMiner.ModDomain, "GenerationProgressSocket", generationProgressSocket); Webserver.DefaultWebserver.RegisterDynamicContent(UpvoidMiner.ModDomain, "ActivatePlayer", (WebRequest request, WebResponse response) => ActivatePlayer()); Webserver.DefaultWebserver.RegisterDynamicContent(UpvoidMiner.ModDomain, "IsPlayerActivated", (WebRequest request, WebResponse response) => response.AppendBody((player != null).ToString())); Webserver.DefaultWebserver.RegisterDynamicContent(UpvoidMiner.ModDomain, "GenerationProgressQuery", webGenerationProgress); Webserver.DefaultWebserver.RegisterDynamicContent(UpvoidMiner.ModDomain, "OpenSiteInBrowser", (WebRequest request, WebResponse response) => Process.Start(request.GetQuery("url"))); } // Create a simple camera that allows free movement. camera = new GenericCamera(); camera.Position = new vec3(0, 10, 0); camera.FarClippingPlane = 1750.0; // Client-only: register terrain materials if (!Scripting.IsHost) { TerrainResource.RegisterResources(world.Terrain); } // Place the camera in the world. world.AttachCamera(camera); Rendering.SetupDefaultPipeline(camera); // Create an active region around the player spawn // Active regions help the engine to decide which parts of a world are important (to generate, render, etc.) // In near future it will be updated when the player moves out of it //world.AddActiveRegion(new ivec3(), 100f, 400f, 40f, 40f); Settings.InitSettingsHandlers(); Webserver.DefaultWebserver.RegisterDynamicContent(UpvoidMiner.ModDomain, "QuitGame", (WebRequest request, WebResponse response) => Scripting.ShutdownEngine()); // Register for input press events. Input.OnPressInput += HandlePressInput; // Register sockets for resource downloading progress bar resourceDownloadProgressSocket = new WebSocketHandler(); Webserver.DefaultWebserver.RegisterWebSocketHandler(UpvoidMiner.ModDomain, "ResourceDownloadProgress", resourceDownloadProgressSocket); if (!Scripting.IsHost) { ActivatePlayer(); } }