diff --git a/RH-Engine/Command.cs b/RH-Engine/Command.cs new file mode 100644 index 0000000..6491de4 --- /dev/null +++ b/RH-Engine/Command.cs @@ -0,0 +1,329 @@ +using LibNoise.Primitive; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; + +namespace RH_Engine +{ + class Command + { + public const string STANDARD_HEAD = "Head"; + public const string STANDARD_GROUND = "GroundPlane"; + public const string STANDARD_SUN = "SunLight"; + public const string STANDARD_LEFTHAND = "LeftHand"; + public const string STANDARD_RIGHTHAND = "RightHand"; + + + + string tunnelID; + + public Command(string tunnelID) + { + this.tunnelID = tunnelID; + } + + public string TerrainCommand(int[] sizeArray, float[] heightsArray) + { + dynamic payload = new + { + id = "scene/terrain/add", + data = new + { + size = sizeArray, + heights = heightsArray + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + public string AddLayer(string uid, string texture) + { + dynamic payload = new + { + id = "scene/node/addlayer", + 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", + minHeight = 0, + maxHeight = 10, + fadeDist = 1 + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + public string UpdateTerrain() + { + dynamic payload = new + { + id = "scene/terrain/update", + data = new + { + + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string AddNodeCommand() + { + dynamic payload = new + { + id = "scene/node/add", + data = new + { + name = "newNode", + components = new + { + terrain = new + { + smoothnormals = true + } + } + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string DeleteNode(string uuid) + { + + dynamic payload = new + { + id = "scene/node/delete", + data = new + { + id = uuid, + + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + + } + + public string AddBikeModel() + { + return AddModel("bike", "data\\NetworkEngine\\models\\bike\\bike.fbx"); + } + + public string AddModel(string nodeName, string fileLocation) + { + return AddModel(nodeName, fileLocation, null, new float[] { 0, 0, 0 }, 1, new float[] { 0, 0, 0 }); + } + + public string AddModel(string nodeName, string fileLocation, float[] positionVector, float scalar, float[] rotationVector) + { + return AddModel(nodeName, fileLocation, null, positionVector, scalar, rotationVector); + } + + public string AddModel(string nodeName, string fileLocation, string animationLocation, float[] positionVector, float scalar, float[] rotationVector) + { + string namename = nodeName; + bool animatedBool = false; + if (animationLocation != null) + { + animatedBool = true; + } + + dynamic payload = new + { + id = "scene/node/add", + data = new + { + name = namename, + components = new + { + transform = new + { + position = positionVector, + scale = scalar, + rotation = rotationVector + + }, + model = new + { + file = fileLocation, + cullbackfaces = true, + animated = animatedBool, + animation = animationLocation + }, + } + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string MoveTo(string uuid, float[] positionVector, float rotateValue, float speedValue, float timeValue) + { + return MoveTo(uuid, "idk", positionVector, rotateValue, "linear", false, speedValue, timeValue); + } + + private string MoveTo(string uuid, string stopValue, float[] positionVector, float rotateValue, string interpolateValue, bool followHeightValue, float speedValue, float timeValue) + { + dynamic payload = new + { + id = "scene/node/moveto", + data = new + { + id = uuid, + stop = stopValue, + position = positionVector, + rotate = rotateValue, + interpolate = interpolateValue, + followheight = followHeightValue, + speed = speedValue, + time = timeValue + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + + public string RouteCommand() + { + ImprovedPerlin improvedPerlin = new ImprovedPerlin(4325, LibNoise.NoiseQuality.Best); + Random r = new Random(); + dynamic payload = new + { + id = "route/add", + data = new + { + nodes = new dynamic[] + { + new + { + /*pos = GetPos(0.6f, improvedPerlin)*/ + pos = new int[] {0,0,5 }, + dir = new int[] { r.Next(20,100),0,-r.Next(20, 100) } + }, + new + { + //pos = GetPos(1.6f, improvedPerlin), + pos = new int[] {50,0,0 }, + dir = new int[] { r.Next(20, 100),0,r.Next(20, 100) } + }, + new + { + //pos = GetPos(2.654f, improvedPerlin), + pos = new int[] {20,0,20 }, + dir = new int[] { r.Next(20, 100),0,r.Next(20, 100) } + }, + new + { + //pos = GetPos(3.6543f, improvedPerlin), + pos = new int[] {10,0,50 }, + dir = new int[] { -r.Next(3,7),0,r.Next(3,7) } + }, + new + { + pos = new int[] {0,0,50 }, + dir = new int[] { -r.Next(20, 50),0,-r.Next(20, 50) } + } + } + } + }; + Console.WriteLine("route command: " + JsonConvert.SerializeObject(Payload(payload))); + return JsonConvert.SerializeObject(Payload(payload)); + } + + private float[] GetPos(float n, ImprovedPerlin improvedPerlin) + { + float[] res = new float[] { improvedPerlin.GetValue(n) * 50, 0, improvedPerlin.GetValue(n) * 50 }; + return res; + } + + private int[] GetDir() + { + Random rng = new Random(); + int[] dir = {rng.Next(50), 0, rng.Next(50)}; + return dir; + } + + public string FollowRouteCommand() + { + return ""; + } + + public string RoadCommand(string uuid_route) + { + Console.WriteLine("road"); + dynamic payload = new + { + id = "scene/road/add", + data = new + { + route = uuid_route, + diffuse = "data/NetworkEngine/textures/tarmac_diffuse.png", + normal = "data/NetworkEngine/textures/tarmac_normale.png", + specular = "data/NetworkEngine/textures/tarmac_specular.png", + heightoffset = 1f + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string GetSceneInfoCommand() + { + dynamic payload = new + { + id = "scene/get" + }; + + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string ResetScene() + { + dynamic payload = new + { + id = "scene/reset" + }; + + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string SkyboxCommand(double timeToSet) + { + if (timeToSet < 0 || timeToSet > 24) + { + throw new Exception("The time must be between 0 and 24!"); + } + + + dynamic payload = new + { + id = "scene/skybox/settime", + data = new + { + time = timeToSet + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + + } + + + private object Payload(dynamic message) + { + return new + { + id = "tunnel/send", + data = new + { + dest = tunnelID, + data = message, + } + }; + } + + + + } +} diff --git a/RH-Engine/CreateGraphics.cs b/RH-Engine/CreateGraphics.cs new file mode 100644 index 0000000..03e3b1a --- /dev/null +++ b/RH-Engine/CreateGraphics.cs @@ -0,0 +1,359 @@ +using LibNoise.Primitive; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; + +namespace RH_Engine +{ + class CreateGraphics + { + public const string STANDARD_HEAD = "Head"; + public const string STANDARD_GROUND = "GroundPlane"; + public const string STANDARD_SUN = "SunLight"; + public const string STANDARD_LEFTHAND = "LeftHand"; + public const string STANDARD_RIGHTHAND = "RightHand"; + + + + string tunnelID; + + public CreateGraphics(string tunnelID) + { + this.tunnelID = tunnelID; + } + + public string TerrainCommand(int[] sizeArray, float[] heightsArray) + { + dynamic payload = new + { + id = "scene/terrain/add", + data = new + { + size = sizeArray, + heights = heightsArray + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + public string AddLayer(string uid, string texture) + { + dynamic payload = new + { + id = "scene/node/addlayer", + 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", + minHeight = 0, + maxHeight = 10, + fadeDist = 1 + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + public string UpdateTerrain() + { + dynamic payload = new + { + id = "scene/terrain/update", + data = new + { + + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string AddNodeCommand() + { + dynamic payload = new + { + id = "scene/node/add", + data = new + { + name = "newNode", + components = new + { + terrain = new + { + smoothnormals = true + } + } + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string DeleteNode(string uuid) + { + + dynamic payload = new + { + id = "scene/node/delete", + data = new + { + id = uuid, + + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + + } + + public string AddBikeModel() + { + return AddModel("bike", "data\\NetworkEngine\\models\\bike\\bike.fbx"); + } + + public string AddModel(string nodeName, string fileLocation) + { + return AddModel(nodeName, fileLocation, null, new float[] { 0, 0, 0 }, 1, new float[] { 0, 0, 0 }); + } + + public string AddModel(string nodeName, string fileLocation, float[] positionVector, float scalar, float[] rotationVector) + { + return AddModel(nodeName, fileLocation, null, positionVector, scalar, rotationVector); + } + + public string AddModel(string nodeName, string fileLocation, string animationLocation, float[] positionVector, float scalar, float[] rotationVector) + { + string namename = nodeName; + bool animatedBool = false; + if (animationLocation != null) + { + animatedBool = true; + } + + dynamic payload = new + { + id = "scene/node/add", + data = new + { + name = namename, + components = new + { + transform = new + { + position = positionVector, + scale = scalar, + rotation = rotationVector + + }, + model = new + { + file = fileLocation, + cullbackfaces = true, + animated = animatedBool, + animation = animationLocation + }, + } + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string MoveTo(string uuid, float[] positionVector, string rotateValue, float speedValue, float timeValue) + { + return MoveTo(uuid, "idk", positionVector, rotateValue, "linear", false, speedValue, timeValue); + } + + private string MoveTo(string uuid, string stopValue, float[] positionVector, string rotateValue, string interpolateValue, bool followHeightValue, float speedValue, float timeValue) + { + dynamic payload = new + { + id = "scene/node/moveto", + data = new + { + id = uuid, + stop = stopValue, + position = positionVector, + rotate = rotateValue, + interpolate = interpolateValue, + followheight = followHeightValue, + speed = speedValue, + time = timeValue + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string RouteCommand() + { + ImprovedPerlin improvedPerlin = new ImprovedPerlin(4325, LibNoise.NoiseQuality.Best); + Random r = new Random(); + dynamic payload = new + { + id = "route/add", + data = new + { + nodes = new dynamic[] + { + new + { + /*pos = GetPos(0.6f, improvedPerlin)*/ + pos = new int[] {0,0,5 }, + dir = new int[] { r.Next(20,100),0,-r.Next(20, 100) } + }, + new + { + //pos = GetPos(1.6f, improvedPerlin), + pos = new int[] {50,0,0 }, + dir = new int[] { r.Next(20, 100),0,r.Next(20, 100) } + }, + new + { + //pos = GetPos(2.654f, improvedPerlin), + pos = new int[] {20,0,20 }, + dir = new int[] { r.Next(20, 100),0,r.Next(20, 100) } + }, + new + { + //pos = GetPos(3.6543f, improvedPerlin), + pos = new int[] {10,0,50 }, + dir = new int[] { -r.Next(3,7),0,r.Next(3,7) } + }, + new + { + pos = new int[] {0,0,50 }, + dir = new int[] { -r.Next(20, 50),0,-r.Next(20, 50) } + } + } + } + }; + Console.WriteLine("route command: " + JsonConvert.SerializeObject(Payload(payload))); + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string RouteFollow(string routeID, string nodeID, float speedValue) + { + return RouteFollow(routeID, nodeID, speedValue, new float[] { 0, 0, 0 }); + } + + public string RouteFollow(string routeID, string nodeID, float speedValue, float[] positionOffsetVector) + { + return RouteFollow(routeID, nodeID, speedValue, 0, "XYZ", 1, true, new float[] { 0, 0, 0 }, positionOffsetVector); + } + private string RouteFollow(string routeID, string nodeID, float speedValue, float offsetValue, string rotateValue, float smoothingValue, bool followHeightValue, float[] rotateOffsetVector, float[] positionOffsetVector) + { + dynamic payload = new + { + id = "route/follow", + data = new + { + route = routeID, + node = nodeID, + speed = speedValue, + offset = offsetValue, + rotate = rotateValue, + smoothing = smoothingValue, + followHeight = followHeightValue, + rotateOffset = rotateOffsetVector, + positionOffset = positionOffsetVector + + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + private float[] GetPos(float n, ImprovedPerlin improvedPerlin) + { + float[] res = new float[] { improvedPerlin.GetValue(n) * 50, 0, improvedPerlin.GetValue(n) * 50 }; + return res; + } + + private int[] GetDir() + { + Random rng = new Random(); + int[] dir = { rng.Next(50), 0, rng.Next(50) }; + return dir; + } + + public string FollowRouteCommand() + { + return ""; + } + + public string RoadCommand(string uuid_route) + { + Console.WriteLine("road"); + dynamic payload = new + { + id = "scene/road/add", + data = new + { + route = uuid_route, + diffuse = "data/NetworkEngine/textures/tarmac_diffuse.png", + normal = "data/NetworkEngine/textures/tarmac_normale.png", + specular = "data/NetworkEngine/textures/tarmac_specular.png", + heightoffset = 1f + } + }; + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string GetSceneInfoCommand() + { + dynamic payload = new + { + id = "scene/get" + }; + + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string ResetScene() + { + dynamic payload = new + { + id = "scene/reset" + }; + + return JsonConvert.SerializeObject(Payload(payload)); + } + + public string SkyboxCommand(double timeToSet) + { + if (timeToSet < 0 || timeToSet > 24) + { + throw new Exception("The time must be between 0 and 24!"); + } + + + dynamic payload = new + { + id = "scene/skybox/settime", + data = new + { + time = timeToSet + } + + }; + return JsonConvert.SerializeObject(Payload(payload)); + + } + + + private object Payload(dynamic message) + { + return new + { + id = "tunnel/send", + data = new + { + dest = tunnelID, + data = message, + } + }; + } + + + + } +} diff --git a/RH-Engine/Program.cs b/RH-Engine/Program.cs index d396516..eb7bff3 100644 --- a/RH-Engine/Program.cs +++ b/RH-Engine/Program.cs @@ -17,11 +17,11 @@ namespace RH_Engine { private static PC[] PCs = { //new PC("DESKTOP-M2CIH87", "Fabian"), - //new PC("T470S", "Shinichi"), - new PC("DESKTOP-DHS478C", "semme") + new PC("T470S", "Shinichi"), + //new PC("DESKTOP-DHS478C", "semme") //new PC("DESKTOP-TV73FKO", "Wouter"), //new PC("DESKTOP-SINMKT1", "Ralf"), - //new PC("NA", "Bart") + //new PC("NA", "Bart") }; private static void Main(string[] args) {