Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acff35359f | ||
|
|
d7fb25697c | ||
|
|
6c03da9c1a | ||
|
|
926665d210 | ||
|
|
38650d2f16 | ||
|
|
92fd42acb6 | ||
|
|
ad2ad89fec | ||
|
|
2da20b9d79 | ||
|
|
c48efb161a | ||
|
|
386ffd12b5 | ||
|
|
768f259d24 | ||
|
|
86149a472b | ||
|
|
798a6dca3a | ||
|
|
2baee3c197 | ||
|
|
b3dae87b64 | ||
|
|
46b68c71c9 | ||
|
|
49c1cccbb5 | ||
|
|
d4d6e9eb92 | ||
|
|
a047209e95 | ||
|
|
11c398d9e5 | ||
|
|
66c2341066 | ||
|
|
61b6eb2ec3 | ||
|
|
6977d60387 | ||
|
|
3fca2a10eb | ||
|
|
e9f9217d6c | ||
|
|
bd4bd724d4 | ||
|
|
0292debae7 | ||
|
|
eb986a603e | ||
|
|
f47cd01cac | ||
|
|
a1232b2b12 | ||
|
|
0a0340d316 |
@@ -9,12 +9,13 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Blocks
|
m_Name: Blocks
|
||||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_ShaderKeywords:
|
m_ShaderKeywords: _ALPHATEST_ON
|
||||||
m_LightmapFlags: 4
|
m_LightmapFlags: 4
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: 2450
|
||||||
stringTagMap: {}
|
stringTagMap:
|
||||||
|
RenderType: TransparentCutout
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@@ -57,14 +58,14 @@ Material:
|
|||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
- _Cutoff: 0.5
|
- _Cutoff: 1
|
||||||
- _DetailNormalMapScale: 1
|
- _DetailNormalMapScale: 1
|
||||||
- _DstBlend: 0
|
- _DstBlend: 0
|
||||||
- _GlossMapScale: 1
|
- _GlossMapScale: 1
|
||||||
- _Glossiness: 0
|
- _Glossiness: 0
|
||||||
- _GlossyReflections: 1
|
- _GlossyReflections: 1
|
||||||
- _Metallic: 0
|
- _Metallic: 0
|
||||||
- _Mode: 0
|
- _Mode: 1
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Parallax: 0.02
|
- _Parallax: 0.02
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Invisible
|
||||||
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_ShaderKeywords: _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 2800000, guid: be5ce586e1f1d9a43aea5965b6e5ea02, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Floats:
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _Cutoff: 0.995
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 0
|
||||||
|
- _Glossiness: 0
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _SmoothnessTextureChannel: 1
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _UVSec: 0
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 0}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 204bd9a43c6ebf6489beeea547931033
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -240,7 +240,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: -149.2, y: -56.1}
|
m_AnchoredPosition: {x: -149.2, y: -78.60002}
|
||||||
m_SizeDelta: {x: 160, y: 30}
|
m_SizeDelta: {x: 160, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &71764842
|
--- !u!114 &71764842
|
||||||
@@ -480,7 +480,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: -149.19998, y: -101.5}
|
m_AnchoredPosition: {x: -149.19998, y: -124.000015}
|
||||||
m_SizeDelta: {x: 160, y: 30}
|
m_SizeDelta: {x: 160, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &854417905
|
--- !u!114 &854417905
|
||||||
@@ -561,7 +561,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 105.799995, y: -56.099995}
|
m_AnchoredPosition: {x: 105.799995, y: -78.60001}
|
||||||
m_SizeDelta: {x: 297.6238, y: 30}
|
m_SizeDelta: {x: 297.6238, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &1047272871
|
--- !u!114 &1047272871
|
||||||
@@ -794,7 +794,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 105.80006, y: -10.699997}
|
m_AnchoredPosition: {x: 105.80006, y: -33.200016}
|
||||||
m_SizeDelta: {x: 297.6238, y: 30}
|
m_SizeDelta: {x: 297.6238, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &1174182476
|
--- !u!114 &1174182476
|
||||||
@@ -948,7 +948,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 1, y: 0}
|
m_AnchorMin: {x: 1, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 0}
|
m_AnchorMax: {x: 1, y: 0}
|
||||||
m_AnchoredPosition: {x: -105.899994, y: 54}
|
m_AnchoredPosition: {x: -105.899994, y: 43}
|
||||||
m_SizeDelta: {x: 160, y: 45.3632}
|
m_SizeDelta: {x: 160, y: 45.3632}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &1279274160
|
--- !u!114 &1279274160
|
||||||
@@ -1239,7 +1239,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 105.80001, y: -101.499985}
|
m_AnchoredPosition: {x: 105.80001, y: -124}
|
||||||
m_SizeDelta: {x: 297.6238, y: 30}
|
m_SizeDelta: {x: 297.6238, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &1603203176
|
--- !u!114 &1603203176
|
||||||
@@ -1533,7 +1533,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: -149.19998, y: -10.699997}
|
m_AnchoredPosition: {x: -149.19998, y: -33.200016}
|
||||||
m_SizeDelta: {x: 160, y: 30}
|
m_SizeDelta: {x: 160, y: 30}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &1783690559
|
--- !u!114 &1783690559
|
||||||
|
|||||||
@@ -81,6 +81,19 @@ public class Chunk
|
|||||||
triangleIndex++;
|
triangleIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AddUV(textures[f]);
|
||||||
|
}
|
||||||
|
else if(world.GetBlockID(new Vector3(x + Data.faceChecks[f].x + chunkPosition.x * Data.chunkWidth,
|
||||||
|
y + Data.faceChecks[f].y,
|
||||||
|
z + Data.faceChecks[f].z + chunkPosition.z * Data.chunkWidth)) == 6)
|
||||||
|
{
|
||||||
|
for (int v = 0; v < 6; v++)
|
||||||
|
{
|
||||||
|
vertices.Add(Data.vertices[Data.triangles[f, v]] + new Vector3(x, y, z));
|
||||||
|
triangles.Add(triangleIndex);
|
||||||
|
triangleIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
AddUV(textures[f]);
|
AddUV(textures[f]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
@@ -252,12 +254,22 @@ public class Client
|
|||||||
Send(new byte[] { 3, (byte)chunk.x, (byte)chunk.z, xInChunk, yInChunk, zInChunk, blockID });
|
Send(new byte[] { 3, (byte)chunk.x, (byte)chunk.z, xInChunk, yInChunk, zInChunk, blockID });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendDeadMessage()
|
||||||
|
{
|
||||||
|
Send(new byte[]{10});
|
||||||
|
}
|
||||||
|
|
||||||
//default send method
|
//default send method
|
||||||
private void Send(byte[] data)
|
private void Send(byte[] data)
|
||||||
{
|
{
|
||||||
client.Send(data, data.Length);
|
client.Send(data, data.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SaveWorld()
|
||||||
|
{
|
||||||
|
Send(new byte[]{9});
|
||||||
|
}
|
||||||
|
|
||||||
public void Disconnect()
|
public void Disconnect()
|
||||||
{
|
{
|
||||||
Send(new byte[] { 4 });
|
Send(new byte[] { 4 });
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ public class Player : MonoBehaviour
|
|||||||
{
|
{
|
||||||
//game
|
//game
|
||||||
[SerializeField] private float mouseSpeed;
|
[SerializeField] private float mouseSpeed;
|
||||||
[SerializeField] private float walkSpeed = 5;
|
[SerializeField] private float defaultSpeed = 5;
|
||||||
|
[SerializeField] private float sprintSpeed = 8;
|
||||||
|
[SerializeField] private float sneakSpeed = 2;
|
||||||
|
private float walkSpeed;
|
||||||
[SerializeField] private float jumpForce;
|
[SerializeField] private float jumpForce;
|
||||||
[SerializeField] private World world;
|
[SerializeField] private World world;
|
||||||
private float playerWidth = 0.15f;
|
private float playerWidth = 0.15f;
|
||||||
@@ -21,12 +24,15 @@ public class Player : MonoBehaviour
|
|||||||
private float verticalMomentum = 0;
|
private float verticalMomentum = 0;
|
||||||
private bool jumpRequest;
|
private bool jumpRequest;
|
||||||
private bool isGrounded = true;
|
private bool isGrounded = true;
|
||||||
|
private float lastTriggerR = 0, lastTriggerL = 0;
|
||||||
|
|
||||||
private float gravity = -20f;
|
private float gravity = -20f;
|
||||||
private Camera camera = null;
|
private Camera camera = null;
|
||||||
private Vector3 lastPosition = new Vector3();
|
private Vector3 lastPosition = new Vector3();
|
||||||
private Quaternion lastRotation = new Quaternion();
|
private Quaternion lastRotation = new Quaternion();
|
||||||
|
|
||||||
|
private byte currentBlock = 1;
|
||||||
|
|
||||||
//network
|
//network
|
||||||
private Client client = null;
|
private Client client = null;
|
||||||
|
|
||||||
@@ -37,8 +43,9 @@ public class Player : MonoBehaviour
|
|||||||
//lock the cursor
|
//lock the cursor
|
||||||
Cursor.lockState = CursorLockMode.Locked;
|
Cursor.lockState = CursorLockMode.Locked;
|
||||||
camera = GetComponentInChildren<Camera>();
|
camera = GetComponentInChildren<Camera>();
|
||||||
transform.position = new Vector3((byte)transform.position.x,
|
transform.position = GetDefaultPlayerPosition();
|
||||||
world.GetHeight((byte)transform.position.x, (byte)transform.position.z) + 2, (byte)transform.position.z);
|
|
||||||
|
walkSpeed = defaultSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Jump()
|
private void Jump()
|
||||||
@@ -87,6 +94,28 @@ public class Player : MonoBehaviour
|
|||||||
mouseX = Input.GetAxis("Mouse X");
|
mouseX = Input.GetAxis("Mouse X");
|
||||||
mouseY = Input.GetAxis("Mouse Y");
|
mouseY = Input.GetAxis("Mouse Y");
|
||||||
|
|
||||||
|
//Sprinting
|
||||||
|
if (Input.GetKeyDown(KeyCode.LeftShift) || Input.GetButtonDown("Left Stick Button"))
|
||||||
|
{
|
||||||
|
walkSpeed = sprintSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyUp(KeyCode.LeftShift) || Input.GetButtonUp("Left Stick Button"))
|
||||||
|
{
|
||||||
|
walkSpeed = defaultSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sneaking
|
||||||
|
if (Input.GetKeyDown(KeyCode.LeftControl))
|
||||||
|
{
|
||||||
|
walkSpeed = sneakSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyUp(KeyCode.LeftControl))
|
||||||
|
{
|
||||||
|
walkSpeed = defaultSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
if (isGrounded && Input.GetButton("Jump"))
|
if (isGrounded && Input.GetButton("Jump"))
|
||||||
{
|
{
|
||||||
jumpRequest = true;
|
jumpRequest = true;
|
||||||
@@ -96,29 +125,75 @@ public class Player : MonoBehaviour
|
|||||||
rotX -= mouseY * 1.4f;
|
rotX -= mouseY * 1.4f;
|
||||||
rotX = Mathf.Clamp(rotX, -90, 90);
|
rotX = Mathf.Clamp(rotX, -90, 90);
|
||||||
|
|
||||||
camera.transform.localRotation = Quaternion.Euler(rotX, 0, 0);
|
camera.transform.localRotation = Quaternion.Euler(rotX * Time.timeScale, 0, 0);
|
||||||
|
|
||||||
transform.Rotate(0, mouseX, 0);
|
transform.Rotate(0, mouseX * Time.timeScale, 0);
|
||||||
|
|
||||||
//send destroy block request to server
|
//send destroy block request to server
|
||||||
if (Input.GetMouseButtonDown(0))
|
if (Input.GetMouseButtonDown(0) || (Input.GetAxis("Right Trigger") > 0 && lastTriggerR == 0))
|
||||||
{
|
{
|
||||||
if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit))
|
if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit, 8))
|
||||||
{
|
{
|
||||||
hit.point += camera.transform.forward / 10;
|
hit.point += camera.transform.forward / 10;
|
||||||
client.EditBlock(hit.point, 0);
|
client.EditBlock(hit.point, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//send build block request to server
|
lastTriggerR = Input.GetAxis("Right Trigger");
|
||||||
if (Input.GetMouseButtonDown(1))
|
|
||||||
|
if (currentBlock == 1)
|
||||||
{
|
{
|
||||||
if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit))
|
if (Input.GetAxisRaw("Mouse ScrollWheel") < 0)
|
||||||
|
{
|
||||||
|
currentBlock = (byte)(world.blockData.Length - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentBlock += (byte)(Input.GetAxisRaw("Mouse ScrollWheel") * 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (currentBlock == world.blockData.Length - 1)
|
||||||
|
{
|
||||||
|
if (Input.GetAxisRaw("Mouse ScrollWheel") > 0)
|
||||||
|
{
|
||||||
|
currentBlock = (byte)(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentBlock += (byte)(Input.GetAxisRaw("Mouse ScrollWheel") * 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentBlock += (byte)(Input.GetAxisRaw("Mouse ScrollWheel") * 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
//send build block request to server
|
||||||
|
if (Input.GetMouseButtonDown(1) || (Input.GetAxis("Left Trigger") > 0 && lastTriggerL == 0))
|
||||||
|
{
|
||||||
|
if (Physics.Raycast(camera.transform.position, camera.transform.forward, out RaycastHit hit, 8))
|
||||||
{
|
{
|
||||||
hit.point -= camera.transform.forward / 10;
|
hit.point -= camera.transform.forward / 10;
|
||||||
client.EditBlock(hit.point, 4);
|
client.EditBlock(hit.point, currentBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastTriggerL = Input.GetAxis("Left Trigger");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (transform.position.y < 0)
|
||||||
|
{
|
||||||
|
if(Time.timeScale > 0)
|
||||||
|
{
|
||||||
|
world.ShowDeadScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyDown(KeyCode.Escape))
|
||||||
|
{
|
||||||
|
world.ShowPauseScreen();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CalculateVelocity()
|
private void CalculateVelocity()
|
||||||
@@ -289,5 +364,11 @@ public class Player : MonoBehaviour
|
|||||||
this.rotation = rotation;
|
this.rotation = rotation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector3 GetDefaultPlayerPosition()
|
||||||
|
{
|
||||||
|
return new Vector3((byte)transform.position.x,
|
||||||
|
world.GetHeight((byte)transform.position.x, (byte)transform.position.z) + 2, (byte)transform.position.z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
public class World : MonoBehaviour
|
public class World : MonoBehaviour
|
||||||
{
|
{
|
||||||
@@ -17,12 +19,18 @@ public class World : MonoBehaviour
|
|||||||
private Queue<Player.PlayerRotationsUpdateData> playersRotationsToUpdate =
|
private Queue<Player.PlayerRotationsUpdateData> playersRotationsToUpdate =
|
||||||
new Queue<Player.PlayerRotationsUpdateData>();
|
new Queue<Player.PlayerRotationsUpdateData>();
|
||||||
|
|
||||||
|
private bool backToMenuRequest = false;
|
||||||
|
|
||||||
|
[SerializeField] private Player player;
|
||||||
|
[SerializeField] private GameObject deadScreen;
|
||||||
|
[SerializeField] private GameObject pauseScreen;
|
||||||
|
|
||||||
//chunks
|
//chunks
|
||||||
private Chunk[,] chunks;
|
private Chunk[,] chunks;
|
||||||
private Queue<ChunkCoord> chunksToUpdate = new Queue<ChunkCoord>();
|
private Queue<ChunkCoord> chunksToUpdate = new Queue<ChunkCoord>();
|
||||||
|
|
||||||
//blocks
|
//blocks
|
||||||
[SerializeField] private BlockData[] blockData;
|
[SerializeField] public BlockData[] blockData;
|
||||||
|
|
||||||
//network
|
//network
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -91,6 +99,12 @@ public class World : MonoBehaviour
|
|||||||
g.transform.rotation = data.rotation;
|
g.transform.rotation = data.rotation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go bock to menu
|
||||||
|
if (backToMenuRequest)
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("Scenes/Login", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//enqueue player position update to list
|
//enqueue player position update to list
|
||||||
@@ -138,49 +152,12 @@ public class World : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//return the ID of a block
|
|
||||||
public byte GetBlockID(Vector3 positionInWorld)
|
|
||||||
{
|
|
||||||
byte height = GetHeight((int)positionInWorld.x, (int)positionInWorld.z);
|
|
||||||
|
|
||||||
//world pass
|
|
||||||
if (positionInWorld.x < 0 || positionInWorld.y < 0 || positionInWorld.z < 0 ||
|
|
||||||
positionInWorld.x >= worldSize * Data.chunkWidth || positionInWorld.y > height ||
|
|
||||||
positionInWorld.z >= worldSize * Data.chunkWidth)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//chunk pass
|
|
||||||
if ((int)positionInWorld.y == height)
|
|
||||||
{
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((int)positionInWorld.y == 0)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((int)positionInWorld.y > height - 3)
|
|
||||||
{
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((int)positionInWorld.y < height)
|
|
||||||
{
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//returns if a block is on the position
|
//returns if a block is on the position
|
||||||
public bool CheckBlock(Vector3 positionInWorld)
|
public bool CheckBlock(Vector3 positionInWorld)
|
||||||
{
|
{
|
||||||
if (positionInWorld.x < -1 || positionInWorld.z < -1 ||
|
if (positionInWorld.x < 0 || positionInWorld.z < 0 ||
|
||||||
positionInWorld.x > worldSize * Data.chunkWidth ||
|
positionInWorld.x >= worldSize * Data.chunkWidth ||
|
||||||
positionInWorld.z > worldSize * Data.chunkWidth)
|
positionInWorld.z >= worldSize * Data.chunkWidth)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -217,15 +194,25 @@ public class World : MonoBehaviour
|
|||||||
return blockData[blockID].textures;
|
return blockData[blockID].textures;
|
||||||
}
|
}
|
||||||
|
|
||||||
//get the perlin noise height
|
//get the height
|
||||||
public byte GetHeight(int x, int z)
|
public byte GetHeight(int x, int z)
|
||||||
{
|
{
|
||||||
float scale = 0.025f;
|
int xChunk = x / Data.chunkWidth;
|
||||||
byte perlinHeight = 10;
|
int zChunk = z / Data.chunkWidth;
|
||||||
byte groundHeight = 10;
|
|
||||||
|
|
||||||
byte height = (byte)(Mathf.PerlinNoise((x) * scale + 0.1f, (z) * scale + 0.1f) * perlinHeight + groundHeight);
|
int xInChunk = x - (xChunk * Data.chunkWidth);
|
||||||
return height;
|
int zInChunk = z - (zChunk * Data.chunkWidth);
|
||||||
|
|
||||||
|
Chunk c = chunks[xChunk, zChunk];
|
||||||
|
for (int y = 0; y < Data.chunkHeight; y++)
|
||||||
|
{
|
||||||
|
if (c.blocks[xInChunk, y, zInChunk] == 0)
|
||||||
|
{
|
||||||
|
return (byte)(y - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 250;
|
||||||
}
|
}
|
||||||
|
|
||||||
//edit a block in local chunk storage
|
//edit a block in local chunk storage
|
||||||
@@ -269,7 +256,6 @@ public class World : MonoBehaviour
|
|||||||
client.Disconnect();
|
client.Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Client GetClient()
|
public Client GetClient()
|
||||||
{
|
{
|
||||||
return client;
|
return client;
|
||||||
@@ -282,4 +268,72 @@ public class World : MonoBehaviour
|
|||||||
public string name;
|
public string name;
|
||||||
public byte[] textures = new byte[6];
|
public byte[] textures = new byte[6];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void ShowDeadScreen()
|
||||||
|
{
|
||||||
|
client.SendDeadMessage();
|
||||||
|
Cursor.visible = true;
|
||||||
|
Cursor.lockState = CursorLockMode.None;
|
||||||
|
deadScreen.SetActive(true);
|
||||||
|
Time.timeScale = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShowPauseScreen()
|
||||||
|
{
|
||||||
|
Cursor.visible = true;
|
||||||
|
Cursor.lockState = CursorLockMode.None;
|
||||||
|
pauseScreen.SetActive(true);
|
||||||
|
Time.timeScale = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RespawnButton()
|
||||||
|
{
|
||||||
|
Cursor.visible = false;
|
||||||
|
Cursor.lockState = CursorLockMode.Confined;
|
||||||
|
Time.timeScale = 1;
|
||||||
|
player.transform.position = player.GetDefaultPlayerPosition();
|
||||||
|
deadScreen.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResumeButton()
|
||||||
|
{
|
||||||
|
Cursor.visible = false;
|
||||||
|
Cursor.lockState = CursorLockMode.Confined;
|
||||||
|
Time.timeScale = 1;
|
||||||
|
pauseScreen.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QuitButton()
|
||||||
|
{
|
||||||
|
Time.timeScale = 1;
|
||||||
|
client.Disconnect();
|
||||||
|
SceneManager.LoadScene("Login");
|
||||||
|
deadScreen.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveButton()
|
||||||
|
{
|
||||||
|
client.SaveWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
//return the ID of a block
|
||||||
|
public byte GetBlockID(Vector3 positionInWorld)
|
||||||
|
{
|
||||||
|
if (!(positionInWorld.x < 0 || positionInWorld.y < 0 || positionInWorld.z < 0 ||
|
||||||
|
positionInWorld.x >= worldSize * Data.chunkWidth || positionInWorld.y >= Data.chunkHeight ||
|
||||||
|
positionInWorld.z >= worldSize * Data.chunkWidth))
|
||||||
|
{
|
||||||
|
ChunkCoord chunk = new ChunkCoord((int)(positionInWorld.x / Data.chunkWidth),
|
||||||
|
(int)(positionInWorld.z / Data.chunkWidth));
|
||||||
|
|
||||||
|
int xInChunk = (int)(positionInWorld.x - chunk.x * Data.chunkWidth);
|
||||||
|
int yInChunk = (int)positionInWorld.y;
|
||||||
|
int zInChunk = (int)(positionInWorld.z - chunk.z * Data.chunkWidth);
|
||||||
|
|
||||||
|
return chunks[chunk.x, chunk.z].blocks[xInChunk, yInChunk, zInChunk];
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
"com.unity.test-framework": "1.1.31",
|
"com.unity.test-framework": "1.1.31",
|
||||||
"com.unity.textmeshpro": "3.0.6",
|
"com.unity.textmeshpro": "3.0.6",
|
||||||
"com.unity.timeline": "1.4.8",
|
"com.unity.timeline": "1.4.8",
|
||||||
|
"com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.1",
|
||||||
"com.unity.ugui": "1.0.0",
|
"com.unity.ugui": "1.0.0",
|
||||||
"com.unity.modules.ai": "1.0.0",
|
"com.unity.modules.ai": "1.0.0",
|
||||||
"com.unity.modules.androidjni": "1.0.0",
|
"com.unity.modules.androidjni": "1.0.0",
|
||||||
|
|||||||
@@ -50,6 +50,22 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.sysroot": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"depth": 1,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
|
"com.unity.sysroot.linux-x86_64": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"depth": 1,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.sysroot": "2.0.2"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.test-framework": {
|
"com.unity.test-framework": {
|
||||||
"version": "1.1.31",
|
"version": "1.1.31",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
@@ -82,6 +98,16 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.toolchain.win-x86_64-linux-x86_64": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"depth": 0,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.sysroot": "2.0.2",
|
||||||
|
"com.unity.sysroot.linux-x86_64": "2.0.1"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.ugui": {
|
"com.unity.ugui": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ InputManager:
|
|||||||
negativeButton:
|
negativeButton:
|
||||||
positiveButton: space
|
positiveButton: space
|
||||||
altNegativeButton:
|
altNegativeButton:
|
||||||
altPositiveButton:
|
altPositiveButton: joystick button 0
|
||||||
gravity: 1000
|
gravity: 1000
|
||||||
dead: 0.001
|
dead: 0.001
|
||||||
sensitivity: 1000
|
sensitivity: 1000
|
||||||
@@ -234,7 +234,7 @@ InputManager:
|
|||||||
descriptiveName:
|
descriptiveName:
|
||||||
descriptiveNegativeName:
|
descriptiveNegativeName:
|
||||||
negativeButton:
|
negativeButton:
|
||||||
positiveButton: joystick button 3
|
positiveButton: joystick button 0
|
||||||
altNegativeButton:
|
altNegativeButton:
|
||||||
altPositiveButton:
|
altPositiveButton:
|
||||||
gravity: 1000
|
gravity: 1000
|
||||||
@@ -293,3 +293,83 @@ InputManager:
|
|||||||
type: 0
|
type: 0
|
||||||
axis: 0
|
axis: 0
|
||||||
joyNum: 0
|
joyNum: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_Name: Mouse X
|
||||||
|
descriptiveName:
|
||||||
|
descriptiveNegativeName:
|
||||||
|
negativeButton:
|
||||||
|
positiveButton:
|
||||||
|
altNegativeButton:
|
||||||
|
altPositiveButton:
|
||||||
|
gravity: 0
|
||||||
|
dead: 0
|
||||||
|
sensitivity: 0.3
|
||||||
|
snap: 0
|
||||||
|
invert: 0
|
||||||
|
type: 2
|
||||||
|
axis: 3
|
||||||
|
joyNum: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_Name: Mouse Y
|
||||||
|
descriptiveName:
|
||||||
|
descriptiveNegativeName:
|
||||||
|
negativeButton:
|
||||||
|
positiveButton:
|
||||||
|
altNegativeButton:
|
||||||
|
altPositiveButton:
|
||||||
|
gravity: 0
|
||||||
|
dead: 0
|
||||||
|
sensitivity: 0.3
|
||||||
|
snap: 0
|
||||||
|
invert: 1
|
||||||
|
type: 2
|
||||||
|
axis: 4
|
||||||
|
joyNum: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_Name: Right Trigger
|
||||||
|
descriptiveName:
|
||||||
|
descriptiveNegativeName:
|
||||||
|
negativeButton:
|
||||||
|
positiveButton:
|
||||||
|
altNegativeButton:
|
||||||
|
altPositiveButton:
|
||||||
|
gravity: 0
|
||||||
|
dead: 0
|
||||||
|
sensitivity: 0.3
|
||||||
|
snap: 0
|
||||||
|
invert: 0
|
||||||
|
type: 2
|
||||||
|
axis: 9
|
||||||
|
joyNum: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_Name: Left Trigger
|
||||||
|
descriptiveName:
|
||||||
|
descriptiveNegativeName:
|
||||||
|
negativeButton:
|
||||||
|
positiveButton:
|
||||||
|
altNegativeButton:
|
||||||
|
altPositiveButton:
|
||||||
|
gravity: 0
|
||||||
|
dead: 0
|
||||||
|
sensitivity: 0.3
|
||||||
|
snap: 0
|
||||||
|
invert: 0
|
||||||
|
type: 2
|
||||||
|
axis: 8
|
||||||
|
joyNum: 0
|
||||||
|
- serializedVersion: 3
|
||||||
|
m_Name: Left Stick Button
|
||||||
|
descriptiveName:
|
||||||
|
descriptiveNegativeName:
|
||||||
|
negativeButton:
|
||||||
|
positiveButton: joystick button 8
|
||||||
|
altNegativeButton:
|
||||||
|
altPositiveButton:
|
||||||
|
gravity: 1000
|
||||||
|
dead: 0.001
|
||||||
|
sensitivity: 1000
|
||||||
|
snap: 0
|
||||||
|
invert: 0
|
||||||
|
type: 0
|
||||||
|
axis: 8
|
||||||
|
joyNum: 0
|
||||||
|
|||||||
@@ -621,8 +621,8 @@ PlayerSettings:
|
|||||||
Standalone: 3
|
Standalone: 3
|
||||||
m_RenderingPath: 1
|
m_RenderingPath: 1
|
||||||
m_MobileRenderingPath: 1
|
m_MobileRenderingPath: 1
|
||||||
metroPackageName: Template_3D
|
metroPackageName: Template3D
|
||||||
metroPackageVersion:
|
metroPackageVersion: 1.0.0.0
|
||||||
metroCertificatePath:
|
metroCertificatePath:
|
||||||
metroCertificatePassword:
|
metroCertificatePassword:
|
||||||
metroCertificateSubject:
|
metroCertificateSubject:
|
||||||
@@ -630,7 +630,7 @@ PlayerSettings:
|
|||||||
metroCertificateNotAfter: 0000000000000000
|
metroCertificateNotAfter: 0000000000000000
|
||||||
metroApplicationDescription: Template_3D
|
metroApplicationDescription: Template_3D
|
||||||
wsaImages: {}
|
wsaImages: {}
|
||||||
metroTileShortName:
|
metroTileShortName: Minecraft Client
|
||||||
metroTileShowName: 0
|
metroTileShowName: 0
|
||||||
metroMediumTileShowName: 0
|
metroMediumTileShowName: 0
|
||||||
metroLargeTileShowName: 0
|
metroLargeTileShowName: 0
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public class Server
|
|||||||
//[0] = 6: player ready
|
//[0] = 6: player ready
|
||||||
//[0] = 7: player position update
|
//[0] = 7: player position update
|
||||||
//[0] = 8: player rotation update
|
//[0] = 8: player rotation update
|
||||||
|
//[0] = 9: Save the World
|
||||||
|
//[0] = 10: Player died
|
||||||
|
|
||||||
private void Receive()
|
private void Receive()
|
||||||
{
|
{
|
||||||
@@ -242,6 +244,18 @@ public class Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Save the World
|
||||||
|
if (data[0] == 9)
|
||||||
|
{
|
||||||
|
world.SaveWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
//player died
|
||||||
|
if (data[0] == 10)
|
||||||
|
{
|
||||||
|
Console.WriteLine(playerNames[GetPlayerID(endPoint)] + " died! \n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,11 +4,15 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using Random = UnityEngine.Random;
|
||||||
|
|
||||||
public class World : MonoBehaviour
|
public class World : MonoBehaviour
|
||||||
{
|
{
|
||||||
//basic
|
//basic
|
||||||
[SerializeField] public int worldSize;
|
[SerializeField] public int worldSize;
|
||||||
|
private int randomOffsetX, randomOffsetZ;
|
||||||
|
private int seed = 0;
|
||||||
|
private string dataPath;
|
||||||
|
|
||||||
//chunks
|
//chunks
|
||||||
public Chunk[,] chunks;
|
public Chunk[,] chunks;
|
||||||
@@ -18,6 +22,11 @@ public class World : MonoBehaviour
|
|||||||
[SerializeField] private int transferDelay;
|
[SerializeField] private int transferDelay;
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
|
dataPath = Application.dataPath;
|
||||||
|
|
||||||
|
randomOffsetX = Random.Range(0, 10000);
|
||||||
|
randomOffsetZ = Random.Range(0, 10000);
|
||||||
|
|
||||||
if (File.Exists(Application.dataPath + "\\save.world"))
|
if (File.Exists(Application.dataPath + "\\save.world"))
|
||||||
{
|
{
|
||||||
chunks = new Chunk[worldSize, worldSize];
|
chunks = new Chunk[worldSize, worldSize];
|
||||||
@@ -57,6 +66,7 @@ public class World : MonoBehaviour
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
CreateChunks();
|
CreateChunks();
|
||||||
|
CreateTrees();
|
||||||
}
|
}
|
||||||
Console.WriteLine("world loaded! \n");
|
Console.WriteLine("world loaded! \n");
|
||||||
server = new Server(this, transferDelay);
|
server = new Server(this, transferDelay);
|
||||||
@@ -85,6 +95,78 @@ public class World : MonoBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Create Trees
|
||||||
|
private void CreateTrees()
|
||||||
|
{
|
||||||
|
for (int x = 4; x < worldSize * Data.chunkWidth - 4; x++)
|
||||||
|
{
|
||||||
|
for (int z = 4; z < worldSize * Data.chunkWidth - 4; z++)
|
||||||
|
{
|
||||||
|
if (CheckTree(x, z))
|
||||||
|
{
|
||||||
|
ChunkCoord chunk = new ChunkCoord((int)(x / Data.chunkWidth),
|
||||||
|
(int)(z / Data.chunkWidth));
|
||||||
|
int xInChunk = (int)(x - chunk.x * Data.chunkWidth);
|
||||||
|
int yInChunk = (int)(GetHeight(x, z));
|
||||||
|
int zInChunk = (int)(z - chunk.z * Data.chunkWidth);
|
||||||
|
|
||||||
|
int height = Random.Range(5, 9);
|
||||||
|
|
||||||
|
for (int i = 0; i <= height; i++)
|
||||||
|
{
|
||||||
|
chunks[chunk.x, chunk.z].blocks[xInChunk, yInChunk + i, zInChunk] = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
chunks[chunk.x, chunk.z].blocks[xInChunk, yInChunk + height + 2, zInChunk] = 6;
|
||||||
|
|
||||||
|
for (int ty = -1; ty <= 0; ty++)
|
||||||
|
{
|
||||||
|
for (int tx = -2; tx <= 2; tx++)
|
||||||
|
{
|
||||||
|
for (int tz = -2; tz <= 2; tz++)
|
||||||
|
{
|
||||||
|
ChunkCoord tempChunk = new ChunkCoord((int)((x - tx) / Data.chunkWidth),
|
||||||
|
(int)((z - tz) / Data.chunkWidth));
|
||||||
|
int xTempInChunk = (int)((x - tx) - tempChunk.x * Data.chunkWidth);
|
||||||
|
int zTempInChunk = (int)((z - tz) - tempChunk.z * Data.chunkWidth);
|
||||||
|
|
||||||
|
if (chunks[tempChunk.x, tempChunk.z].blocks[xTempInChunk, yInChunk + height + ty,
|
||||||
|
zTempInChunk] != 7)
|
||||||
|
{
|
||||||
|
chunks[tempChunk.x, tempChunk.z].blocks[xTempInChunk, yInChunk + height + ty,
|
||||||
|
zTempInChunk] = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int tx = -1; tx <= 1; tx++)
|
||||||
|
{
|
||||||
|
for (int tz = -1; tz <= 1; tz++)
|
||||||
|
{
|
||||||
|
ChunkCoord tempChunk = new ChunkCoord((int)((x - tx) / Data.chunkWidth),
|
||||||
|
(int)((z - tz) / Data.chunkWidth));
|
||||||
|
int xTempInChunk = (int)((x - tx) - tempChunk.x * Data.chunkWidth);
|
||||||
|
int zTempInChunk = (int)((z - tz) - tempChunk.z * Data.chunkWidth);
|
||||||
|
|
||||||
|
if (chunks[tempChunk.x, tempChunk.z].blocks[xTempInChunk, yInChunk + height + 1,
|
||||||
|
zTempInChunk] != 7)
|
||||||
|
{
|
||||||
|
chunks[tempChunk.x, tempChunk.z].blocks[xTempInChunk, yInChunk + height + 1,
|
||||||
|
zTempInChunk] = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//return the ID of a block
|
//return the ID of a block
|
||||||
public byte GetBlockID(Vector3 positionInWorld)
|
public byte GetBlockID(Vector3 positionInWorld)
|
||||||
{
|
{
|
||||||
@@ -164,10 +246,24 @@ public class World : MonoBehaviour
|
|||||||
byte perlinHeight = 10;
|
byte perlinHeight = 10;
|
||||||
byte groundHeight = 10;
|
byte groundHeight = 10;
|
||||||
|
|
||||||
byte height = (byte)(Mathf.PerlinNoise((x) * scale + 0.1f, (z) * scale + 0.1f) * perlinHeight + groundHeight);
|
byte height = (byte)(Mathf.PerlinNoise((x + randomOffsetX) * scale + 0.1f, (z + randomOffsetZ) * scale + 0.1f) * perlinHeight + groundHeight);
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CheckTree(int x, int z)
|
||||||
|
{
|
||||||
|
float scale = .99f;
|
||||||
|
float threshold = .96f;
|
||||||
|
|
||||||
|
if (Mathf.PerlinNoise((x) * scale + 0.1f, (z) * scale + 0.1f) >= threshold)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void EditBlock(ChunkCoord chunk, Vector3 positionInChunk, byte blockID)
|
public void EditBlock(ChunkCoord chunk, Vector3 positionInChunk, byte blockID)
|
||||||
{
|
{
|
||||||
byte xInChunk = (byte)(positionInChunk.x);
|
byte xInChunk = (byte)(positionInChunk.x);
|
||||||
@@ -188,9 +284,9 @@ public class World : MonoBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void SaveWorld()
|
public void SaveWorld()
|
||||||
{
|
{
|
||||||
StreamWriter writer = new StreamWriter(Application.dataPath + "\\save.world", false);
|
StreamWriter writer = new StreamWriter(dataPath + "\\save.world", false);
|
||||||
for (int xChunk = 0; xChunk < worldSize; xChunk++)
|
for (int xChunk = 0; xChunk < worldSize; xChunk++)
|
||||||
{
|
{
|
||||||
for (int zChunk = 0; zChunk < worldSize; zChunk++)
|
for (int zChunk = 0; zChunk < worldSize; zChunk++)
|
||||||
|
|||||||
Binary file not shown.
@@ -7,6 +7,7 @@
|
|||||||
"com.unity.test-framework": "1.1.31",
|
"com.unity.test-framework": "1.1.31",
|
||||||
"com.unity.textmeshpro": "3.0.6",
|
"com.unity.textmeshpro": "3.0.6",
|
||||||
"com.unity.timeline": "1.4.8",
|
"com.unity.timeline": "1.4.8",
|
||||||
|
"com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.1",
|
||||||
"com.unity.ugui": "1.0.0",
|
"com.unity.ugui": "1.0.0",
|
||||||
"com.unity.modules.ai": "1.0.0",
|
"com.unity.modules.ai": "1.0.0",
|
||||||
"com.unity.modules.androidjni": "1.0.0",
|
"com.unity.modules.androidjni": "1.0.0",
|
||||||
|
|||||||
@@ -50,6 +50,22 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.sysroot": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"depth": 1,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
|
"com.unity.sysroot.linux-x86_64": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"depth": 1,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.sysroot": "2.0.2"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.test-framework": {
|
"com.unity.test-framework": {
|
||||||
"version": "1.1.31",
|
"version": "1.1.31",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
@@ -82,6 +98,16 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
|
"com.unity.toolchain.win-x86_64-linux-x86_64": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"depth": 0,
|
||||||
|
"source": "registry",
|
||||||
|
"dependencies": {
|
||||||
|
"com.unity.sysroot": "2.0.2",
|
||||||
|
"com.unity.sysroot.linux-x86_64": "2.0.1"
|
||||||
|
},
|
||||||
|
"url": "https://packages.unity.com"
|
||||||
|
},
|
||||||
"com.unity.ugui": {
|
"com.unity.ugui": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
|
|||||||
@@ -621,8 +621,8 @@ PlayerSettings:
|
|||||||
Standalone: 3
|
Standalone: 3
|
||||||
m_RenderingPath: 1
|
m_RenderingPath: 1
|
||||||
m_MobileRenderingPath: 1
|
m_MobileRenderingPath: 1
|
||||||
metroPackageName: Template_3D
|
metroPackageName: Template3D
|
||||||
metroPackageVersion:
|
metroPackageVersion: 1.0.0.0
|
||||||
metroCertificatePath:
|
metroCertificatePath:
|
||||||
metroCertificatePassword:
|
metroCertificatePassword:
|
||||||
metroCertificateSubject:
|
metroCertificateSubject:
|
||||||
@@ -630,7 +630,7 @@ PlayerSettings:
|
|||||||
metroCertificateNotAfter: 0000000000000000
|
metroCertificateNotAfter: 0000000000000000
|
||||||
metroApplicationDescription: Template_3D
|
metroApplicationDescription: Template_3D
|
||||||
wsaImages: {}
|
wsaImages: {}
|
||||||
metroTileShortName:
|
metroTileShortName: Minecraft Server
|
||||||
metroTileShowName: 0
|
metroTileShowName: 0
|
||||||
metroMediumTileShowName: 0
|
metroMediumTileShowName: 0
|
||||||
metroLargeTileShowName: 0
|
metroLargeTileShowName: 0
|
||||||
|
|||||||
Reference in New Issue
Block a user