diff --git a/Minecraft Client/Assets/Content/Player.prefab b/Minecraft Client/Assets/Content/Player.prefab new file mode 100644 index 0000000..0658c67 --- /dev/null +++ b/Minecraft Client/Assets/Content/Player.prefab @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3056554285681583702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3056554285681583703} + - component: {fileID: 8248441652696268542} + - component: {fileID: 5281391562483485911} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3056554285681583703 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3056554285681583702} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 150, y: 50, z: 150} + m_LocalScale: {x: 0.8, y: 1, z: 0.8} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8248441652696268542 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3056554285681583702} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5281391562483485911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3056554285681583702} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Minecraft Client/Assets/Content/Player.prefab.meta b/Minecraft Client/Assets/Content/Player.prefab.meta new file mode 100644 index 0000000..6e2e6e0 --- /dev/null +++ b/Minecraft Client/Assets/Content/Player.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f648243c6b14d514d92cde4ec433276b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Minecraft Client/Assets/Scenes/Game.unity b/Minecraft Client/Assets/Scenes/Game.unity index ef26464..63377a2 100644 --- a/Minecraft Client/Assets/Scenes/Game.unity +++ b/Minecraft Client/Assets/Scenes/Game.unity @@ -308,6 +308,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: material: {fileID: 2100000, guid: f4343d4c3fcbdb94b9db1c71ca64ba0a, type: 2} + playerPrefab: {fileID: 3056554285681583702, guid: f648243c6b14d514d92cde4ec433276b, type: 3} worldSize: 0 blockData: - name: Air @@ -320,89 +321,6 @@ MonoBehaviour: textures: 020207010202 - name: Stone textures: 000000000000 ---- !u!1 &1356629356 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1356629359} - - component: {fileID: 1356629358} - - component: {fileID: 1356629357} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1356629357 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356629356} - m_Enabled: 1 ---- !u!20 &1356629358 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356629356} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.01 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1356629359 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1356629356} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.709, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1789911867} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1414729002 GameObject: m_ObjectHideFlags: 0 @@ -680,9 +598,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1789911867} - component: {fileID: 1789911868} - component: {fileID: 1789911869} + - component: {fileID: 1789911867} - component: {fileID: 1789911870} m_Layer: 0 m_Name: Player @@ -691,7 +609,23 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1789911867 +--- !u!54 &1789911867 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789911866} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!4 &1789911868 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -702,26 +636,10 @@ Transform: m_LocalPosition: {x: 150, y: 50, z: 150} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 1356629359} + - {fileID: 1934992309} m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1789911868 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789911866} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 68efa1f8faa15f54b905841d23d36864, type: 3} - m_Name: - m_EditorClassIdentifier: - mouseSpeed: 3 - moveSpeed: 5 - jumpForce: 5 - world: {fileID: 948138834} --- !u!136 &1789911869 CapsuleCollider: m_ObjectHideFlags: 0 @@ -736,19 +654,102 @@ CapsuleCollider: m_Height: 1.9 m_Direction: 1 m_Center: {x: 0, y: 0, z: 0} ---- !u!54 &1789911870 -Rigidbody: +--- !u!114 &1789911870 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1789911866} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 68efa1f8faa15f54b905841d23d36864, type: 3} + m_Name: + m_EditorClassIdentifier: + mouseSpeed: 4 + moveSpeed: 5 + jumpForce: 5 + world: {fileID: 948138834} +--- !u!1 &1934992308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1934992309} + - component: {fileID: 1934992311} + - component: {fileID: 1934992310} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1934992309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934992308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.585, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1789911868} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!81 &1934992310 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934992308} + m_Enabled: 1 +--- !u!20 &1934992311 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1934992308} + m_Enabled: 1 serializedVersion: 2 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0 - m_UseGravity: 1 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 112 - m_CollisionDetection: 0 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 diff --git a/Minecraft Client/Assets/Scripts/Game/Client.cs b/Minecraft Client/Assets/Scripts/Game/Client.cs index d6484f0..6e6876a 100644 --- a/Minecraft Client/Assets/Scripts/Game/Client.cs +++ b/Minecraft Client/Assets/Scripts/Game/Client.cs @@ -145,6 +145,11 @@ public class Client world.EditBlock(chunk, positionInChunk, blockID); } + + if (data[0] == 5) + { + world.AddPlayer(data[1]); + } } } diff --git a/Minecraft Client/Assets/Scripts/Game/Player.cs b/Minecraft Client/Assets/Scripts/Game/Player.cs index 698cb46..fbfa164 100644 --- a/Minecraft Client/Assets/Scripts/Game/Player.cs +++ b/Minecraft Client/Assets/Scripts/Game/Player.cs @@ -22,6 +22,8 @@ public class Player : MonoBehaviour client = world.GetClient(); Cursor.lockState = CursorLockMode.Locked; camera = GetComponentInChildren(); + transform.position = new Vector3((byte)transform.position.x, + world.GetHeight((byte)transform.position.x, (byte)transform.position.z) + 2, (byte)transform.position.z); } private void FixedUpdate() diff --git a/Minecraft Client/Assets/Scripts/Game/World.cs b/Minecraft Client/Assets/Scripts/Game/World.cs index 41ce021..1e80ddb 100644 --- a/Minecraft Client/Assets/Scripts/Game/World.cs +++ b/Minecraft Client/Assets/Scripts/Game/World.cs @@ -7,11 +7,12 @@ public class World : MonoBehaviour { //basic [SerializeField] private Material material; + [SerializeField] private GameObject playerPrefab; public int worldSize; private string name; - private string ip; - private int port; - + private Dictionary otherPlayers = new Dictionary(); + private Queue playersToCreate = new Queue(); + //chunks private Chunk[,] chunks; private Queue chunksToUpdate = new Queue(); @@ -21,6 +22,8 @@ public class World : MonoBehaviour //network private Client client; + private string ip; + private int port; private void Start() { @@ -37,6 +40,21 @@ public class World : MonoBehaviour ChunkCoord chunk = chunksToUpdate.Dequeue(); chunks[chunk.x, chunk.z].Update(); } + + if (playersToCreate.Count > 0) + { + byte id = playersToCreate.Dequeue(); + GameObject player = Instantiate(playerPrefab); + player.transform.position = new Vector3((byte)player.transform.position.x, + GetHeight((byte)player.transform.position.x, (byte)player.transform.position.z) + 2, (byte)player.transform.position.z); + player.transform.SetParent(gameObject.transform); + otherPlayers.Add(id, player); + } + } + + public void AddPlayer(byte id) + { + playersToCreate.Enqueue(id); } public void CreateChunkArray() @@ -143,7 +161,7 @@ public class World : MonoBehaviour return blockData[blockID].textures; } - private byte GetHeight(int x, int z) + public byte GetHeight(int x, int z) { float scale = 0.025f; byte perlinHeight = 10; diff --git a/Minecraft Server/Assets/Game/Server.cs b/Minecraft Server/Assets/Game/Server.cs index 95352d1..6176297 100644 --- a/Minecraft Server/Assets/Game/Server.cs +++ b/Minecraft Server/Assets/Game/Server.cs @@ -41,7 +41,7 @@ public class Server //[0] = 2: world size //[0] = 3: edit block //[0] = 4: disconnect player - //[0] = 5: + //[0] = 5: create new player in client //[0] = 6: player ready //[0] = 7: @@ -123,8 +123,15 @@ public class Server { int id = GetPlayerID(endPoint); Console.WriteLine(playerNames[id] + " joined" + "\n"); - - + + foreach (IPEndPoint e in players) + { + if (id != GetPlayerID(e)) + { + Send(new byte[]{5, (byte)GetPlayerID(e)}, endPoint); + Send(new byte[]{5, (byte)GetPlayerID(endPoint)}, e); + } + } } } catch (Exception e)