diff --git a/RH-Engine/Command.cs b/RH-Engine/Command.cs index 002d81d..4bfe2bc 100644 --- a/RH-Engine/Command.cs +++ b/RH-Engine/Command.cs @@ -19,30 +19,32 @@ namespace RH_Engine this.tunnelID = tunnelID; } - public string TerrainCommand(int[] sizeArray, float[] heightsArray) + public string TerrainAdd(int[] sizeArray, float[] heightsArray, string serialCode) { dynamic payload = new { id = "scene/terrain/add", + serial = serialCode, data = new { size = sizeArray, - heights = heightsArray + heights = heightsArray, } }; return JsonConvert.SerializeObject(Payload(payload)); } - public string AddLayer(string uid, string texture) + public string AddLayer(string uuid, string serialCode) { dynamic payload = new { id = "scene/node/addlayer", + serial = serialCode, data = new { - id = uid, - diffuse = @"C:\Users\woute\Downloads\NetworkEngine.18.10.10.1\NetworkEngine\data\NetworkEngine\textures\terrain\adesert_cracks_d.jpg", - normal = @"C:\Users\woute\Downloads\NetworkEngine.18.10.10.1\NetworkEngine\data\NetworkEngine\textures\terrain\adesert_mntn_d.jpg", + id = uuid, + diffuse = @"data\NetworkEngine\textures\terrain\grass_green_d.jpg", + normal = @"data\NetworkEngine\textures\terrain\grass_green_n.jpg", minHeight = 0, maxHeight = 10, fadeDist = 1 @@ -63,19 +65,27 @@ namespace RH_Engine return JsonConvert.SerializeObject(Payload(payload)); } - public string AddNodeCommand() + public string renderTerrain(string serialCode) { dynamic payload = new { id = "scene/node/add", + serial = serialCode, data = new { name = "newNode", components = new { + transform = new + { + position = new int[] { -80, 0, -80 }, + scale = 1f, + rotation = new int[] { 0, 0, 0 } + }, terrain = new { - smoothnormals = true + smoothnormals = true, + } } } @@ -311,6 +321,19 @@ namespace RH_Engine return JsonConvert.SerializeObject(Payload(payload)); } + public string ShowRoute(string serialCode, bool goShow) + { + dynamic payload = new + { + id = "route/show", + data = new + { + show = goShow + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + public string RouteCommand(string serialToSend) { ImprovedPerlin improvedPerlin = new ImprovedPerlin(4325, LibNoise.NoiseQuality.Best); @@ -422,12 +445,13 @@ namespace RH_Engine return JsonConvert.SerializeObject(Payload(payload)); } - public string RoadCommand(string uuid_route) + + public string RoadCommand(string uuid_route, string serialCode) { - Console.WriteLine("road"); dynamic payload = new { id = "scene/road/add", + serial = serialCode, data = new { route = uuid_route, @@ -464,6 +488,7 @@ namespace RH_Engine public string SkyboxCommand(double timeToSet) { + Console.WriteLine(timeToSet); if (timeToSet < 0 || timeToSet > 24) { throw new Exception("The time must be between 0 and 24!"); diff --git a/RH-Engine/JSONParser.cs b/RH-Engine/JSONParser.cs index 725defd..19bf695 100644 --- a/RH-Engine/JSONParser.cs +++ b/RH-Engine/JSONParser.cs @@ -87,6 +87,16 @@ namespace RH_Engine return null; } + public static string GetTerrainID(string json) + { + dynamic jsonData = JsonConvert.DeserializeObject(json); + if (jsonData.data.data.status == "ok") + { + return jsonData.data.data.data.uuid; + } + return null; + } + /// /// method to get the uuid from requests for adding a node,route or road /// diff --git a/RH-Engine/Program.cs b/RH-Engine/Program.cs index dc33e25..fcd212a 100644 --- a/RH-Engine/Program.cs +++ b/RH-Engine/Program.cs @@ -4,6 +4,8 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Dynamic; +using System.IO; using System.Net.Sockets; using System.Text; @@ -17,13 +19,15 @@ namespace RH_Engine //new PC("DESKTOP-M2CIH87", "Fabian"), //new PC("T470S", "Shinichi"), //new PC("DESKTOP-DHS478C", "semme"), - new PC("HP-ZBOOK-SEM", "Sem"), + //new PC("HP-ZBOOK-SEM", "Sem"), //new PC("DESKTOP-TV73FKO", "Wouter"), - //new PC("DESKTOP-SINMKT1", "Ralf van Aert"), + new PC("DESKTOP-SINMKT1", "Ralf van Aert"), //new PC("NA", "Bart") }; private static ServerResponseReader serverResponseReader; + + private static string terrainId = string.Empty; private static string sessionId = string.Empty; private static string tunnelId = string.Empty; private static string cameraId = string.Empty; @@ -171,6 +175,8 @@ namespace RH_Engine //Force(stream, mainCommand.DeleteNode(handRightId, "deleteHandR"), "deleteHandR", (message) => Console.WriteLine("Right hand deleted")); }); + CreateTerrain(stream, mainCommand); + //Add route, bike and put camera and bike to follow route at same speed. SendMessageAndOnResponse(stream, mainCommand.RouteCommand("routeID"), "routeID", (message) => routeId = JSONParser.GetResponseUuid(message)); SendMessageAndOnResponse(stream, mainCommand.AddBikeModel("bikeID"), "bikeID", @@ -194,53 +200,45 @@ namespace RH_Engine while (cameraId == string.Empty) { } SetFollowSpeed(5.0f, stream, mainCommand); + WriteTextMessage(stream, mainCommand.RoadCommand(routeId, "road")); + WriteTextMessage(stream, mainCommand.ShowRoute("showRouteFalse", false)); }); }); + + string groundplaneId = GetId("GroundPlane", stream, mainCommand); + WriteTextMessage(stream, mainCommand.DeleteNode(groundplaneId, "none")); + + PlaceHouses(stream, mainCommand); + + WriteTextMessage(stream, mainCommand.SkyboxCommand(DateTime.Now.Hour)); - //Force(stream, mainCommand.addPanel("panelID", bikeId), "panelID", - // (message) => - // { - // Console.WriteLine("panel response: " + message); - // panelId = JSONParser.GetResponseUuid(message); - // while(bikeId == string.Empty) { } - // SetFollowSpeed(5.0f, stream, mainCommand); - // }); - //SendMessageAndOnResponse(stream, maincommand.addpanel("panelid", bikeid), "panelid", - // (message) => - // { - // console.writeline("panelid: " + message); - // //panelid = jsonparser.getpanelid(message); - // panelid = jsonparser.getresponseuuid(message); - // while (bikeid == string.empty) { } - // setfollowspeed(5.0f, stream, maincommand); - // }); + } + private static void PlaceHouses(NetworkStream stream, Command mainCommand) + { + // public string AddModel(string nodeName, string serial, string fileLocation, float[] positionVector, float scalar, float[] rotationVector) + //string folderHouses = @"data\NetworkEngine\models\houses\set1\"; + //SendMessageAndOnResponse(stream, mainCommand.AddModel("House1", "uselessSerial_atm", folderHouses + "house1.obj", new float[] { -20f, 1f, 0f }, 4 , new float[] { 0f, 0f, 0f }), "uselessSerial_atm", (message) => Console.WriteLine(message)); + //WriteTextMessage(stream, mainCommand.AddModel("House1", "uselessSerial_atm", @"C:\Users\Ralf van Aert\Documents\AvansTI\NetworkEngine.18.10.10.1\NetworkEngine\data\NetworkEngine\models\houses\set1\house4.obj")); + PlaceHouse(stream, mainCommand, 2, new float[] { 10f, 1f, 30f }, 1); + PlaceHouse(stream, mainCommand, 1, new float[] { 42f, 1f, 22f }, new float[] { 0f, 90f, 0f }, 2); + PlaceHouse(stream, mainCommand, 11, new float[] { -20f, 1f, 0f }, new float[] { 0f, -35f, 0f }, 3); + PlaceHouse(stream, mainCommand, 7, new float[] { -15f, 1f, 50f }, new float[] { 0f, -50f, 0f }, 4); + PlaceHouse(stream, mainCommand, 24, new float[] { 40f, 1f, 40f }, new float[] { 0f, 75f, 0f }, 5); + PlaceHouse(stream, mainCommand, 22, new float[] { 34f, 1f, -20f }, 6); + PlaceHouse(stream, mainCommand, 14, new float[] { 0f, 1f, -20f }, new float[] { 0f, 210f, 0f }, 7); + } - //WriteTextMessage(stream, mainCommand.TerrainCommand(new int[] { 256, 256 }, null)); - //string command; + private static void PlaceHouse(NetworkStream stream, Command mainCommand, int numberHousemodel, float[] position, int serialNumber) + { + PlaceHouse(stream, mainCommand, numberHousemodel, position, new float[] { 0f, 0f, 0f }, serialNumber); + } - - - //Console.WriteLine("id of head " + GetId(Command.STANDARD_HEAD, stream, mainCommand)); - - //command = mainCommand.AddModel("car", "data\\customModels\\TeslaRoadster.fbx"); - //WriteTextMessage(stream, command); - - //command = mainCommand.addPanel(); - // WriteTextMessage(stream, command); - // string response = ReadPrefMessage(stream); - // Console.WriteLine("add Panel response: \n\r" + response); - // string uuidPanel = JSONParser.getPanelID(response); - // WriteTextMessage(stream, mainCommand.ClearPanel(uuidPanel)); - // Console.WriteLine(ReadPrefMessage(stream)); - // WriteTextMessage(stream, mainCommand.bikeSpeed(uuidPanel, 2.42)); - // Console.WriteLine(ReadPrefMessage(stream)); - // WriteTextMessage(stream, mainCommand.ColorPanel(uuidPanel)); - // Console.WriteLine("Color panel: " + ReadPrefMessage(stream)); - // WriteTextMessage(stream, mainCommand.SwapPanel(uuidPanel)); - // Console.WriteLine("Swap panel: " + ReadPrefMessage(stream)); - Console.WriteLine("id of head " + GetId(Command.STANDARD_HEAD, stream, mainCommand)); + private static void PlaceHouse(NetworkStream stream, Command mainCommand, int numberHousemodel, float[] position, float[] rotation, int serialNumber) + { + string folderHouses = @"data\NetworkEngine\models\houses\set1\"; + SendMessageAndOnResponse(stream, mainCommand.AddModel("House1", "housePlacement" + serialNumber, folderHouses + "house" + numberHousemodel + ".obj", position, 4, rotation), "housePlacement" + serialNumber, (message) => Console.WriteLine(message)); } /// @@ -272,12 +270,32 @@ namespace RH_Engine ImprovedPerlin improvedPerlin = new ImprovedPerlin(0, LibNoise.NoiseQuality.Best); for (int i = 0; i < 256 * 256; i++) { - height[i] = improvedPerlin.GetValue(x / 10, x / 10, x * 100) + 1; + height[i] = improvedPerlin.GetValue(x / 10, x / 10, x * 100)/3.5f + 1; + + if (height[i] > 1.1f) + { + height[i] = height[i] * 0.8f; + } + else if (height[i] < 0.9f) + { + height[i] = height[i] * 1.2f; + } x += 0.001f; } - WriteTextMessage(stream, createGraphics.TerrainCommand(new int[] { 256, 256 }, height)); - WriteTextMessage(stream, createGraphics.AddNodeCommand()); + SendMessageAndOnResponse(stream, createGraphics.TerrainAdd(new int[] { 256, 256 }, height, "terrain"), "terrain", + (message) => + { + + SendMessageAndOnResponse(stream, createGraphics.renderTerrain("renderTerrain"), "renderTerrain", + (message) => + { + terrainId = JSONParser.GetTerrainID(message); + string addLayerMsg = createGraphics.AddLayer(terrainId, "addLayer"); + SendMessageAndOnResponse(stream, addLayerMsg, "addLayer", (message) => Console.WriteLine("")); + + }); + }); } /// @@ -352,6 +370,7 @@ namespace RH_Engine { WriteTextMessage(stream, mainCommand.RouteFollow(routeId, bikeId, speed, new float[] { 0, -(float)Math.PI / 2f, 0 }, new float[] { 0, 0, 0 })); WriteTextMessage(stream, mainCommand.RouteFollow(routeId, cameraId, speed)); + //WriteTextMessage(stream, mainCommand.RouteFollow(routeId, panelId, speed, 1f, "XYZ", 1, false, new float[] { 0, 0, 0 }, new float[] { 0f, 5f, 5f })); } //string routeID, string nodeID, float speedValue, float offsetValue, string rotateValue, float smoothingValue, bool followHeightValue, float[] rotateOffsetVector, float[] positionOffsetVector) private static void Force(NetworkStream stream, string message, string serial, HandleSerial action)