Fixing issues, preparing more multiplayer stuff, added credits
This commit is contained in:
parent
4af61ca2c8
commit
0d8f23cb1f
14 changed files with 400 additions and 185 deletions
314
ServerLog.t4jlog
314
ServerLog.t4jlog
|
|
@ -1,163 +1,163 @@
|
||||||
191:07:2026 14:40:19.401 INFO:
|
192:07:2026 01:57:48.537 INFO:
|
||||||
Launching New Terrain4J Powered Software!
|
Launching New Terrain4J Powered Software!
|
||||||
191:07:2026 14:40:19.411 DEBUG: File [terrain4j.properties] read
|
192:07:2026 01:57:48.542 DEBUG: File [terrain4j.properties] read
|
||||||
191:07:2026 14:40:19.418 DEBUG:
|
192:07:2026 01:57:48.546 DEBUG:
|
||||||
|
|
||||||
successfully loaded configuration:
|
successfully loaded configuration:
|
||||||
{compatibility_mode=false, ShaderRecompiling=true, cap_main_to_tickrate=true, LoadingScreenLocation=resources/EngineResources/Texture/Terrain4JTitleImage.png, z_near_plane=10000.0f, display_width=640, anti_alias_mode=0, main_thread_tickrate=120, Software_Icon=ProgramIcon.png, MaxAllowedVulkanCrashes=10, throttle_on_unfocus=false, vsync=false, cap_fast_to_tickrate=true, Software_Icon_Path=/WindowResources/Icon/, RequestedImages=3, throttle_accuracy=4000000, DualPassRendering=false, field_of_view=60.0f, ShadowMapSize=2048, PhysicalDeviceName=, fast_thread_tickrate=240, vkValidated=true, cap_master_to_tickrate=true, AlphaToCoverage=false, display_height=480, Renderer=1, Software_Title=Terrain4J Game Engine, z_far_plane=0.1f, frame_accuracy=0, master_tick_rate=240, Debug_Shaders=false, DefaultTexturePath=resources/EngineResources/Texture/NoTexture.png}
|
{compatibility_mode=false, ShaderRecompiling=true, cap_main_to_tickrate=true, LoadingScreenLocation=resources/EngineResources/Texture/Terrain4JTitleImage.png, z_near_plane=10000.0f, display_width=640, anti_alias_mode=0, main_thread_tickrate=120, Software_Icon=ProgramIcon.png, MaxAllowedVulkanCrashes=10, throttle_on_unfocus=false, vsync=false, cap_fast_to_tickrate=true, Software_Icon_Path=/WindowResources/Icon/, RequestedImages=3, throttle_accuracy=4000000, DualPassRendering=false, field_of_view=60.0f, ShadowMapSize=2048, PhysicalDeviceName=, fast_thread_tickrate=240, vkValidated=true, cap_master_to_tickrate=true, AlphaToCoverage=false, display_height=480, Renderer=1, Software_Title=Terrain4J Game Engine, z_far_plane=0.1f, frame_accuracy=0, master_tick_rate=240, Debug_Shaders=false, DefaultTexturePath=resources/EngineResources/Texture/NoTexture.png}
|
||||||
|
|
||||||
|
|
||||||
191:07:2026 14:40:19.496 DEBUG: Loading Models From [resources/models/cube/Cube.json]
|
192:07:2026 01:57:48.599 DEBUG: Loading Models From [resources/models/cube/Cube.json]
|
||||||
191:07:2026 14:40:19.569 DEBUG: Loaded Model Data: [ModelData[ID=Cube, Meshes=[MeshData[ID=mesh_0, MaterialID=Cube-mat-1, OffsetVertex=0, VertexSize=1344, OffsetIndex=0, IndexSize=144]], VertexPath=resources/models/cube/Cube.vtx, IndexPath=resources/models/cube/Cube.idx]]
|
192:07:2026 01:57:48.646 DEBUG: Loaded Model Data: [ModelData[ID=Cube, Meshes=[MeshData[ID=mesh_0, MaterialID=Cube-mat-1, OffsetVertex=0, VertexSize=1344, OffsetIndex=0, IndexSize=144]], VertexPath=resources/models/cube/Cube.vtx, IndexPath=resources/models/cube/Cube.idx]]
|
||||||
191:07:2026 14:40:19.569 DEBUG: Loading Materials From [resources/models/cube/Cube_mat.json]
|
192:07:2026 01:57:48.646 DEBUG: Loading Materials From [resources/models/cube/Cube_mat.json]
|
||||||
191:07:2026 14:40:19.584 DEBUG: Loaded Material Data: [[MaterialData[ID=Cube-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Cube-mat-1, TexturePath=resources\models\cube\cubetexture.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Cube-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.657 DEBUG: Loaded Material Data: [[MaterialData[ID=Cube-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Cube-mat-1, TexturePath=resources\models\cube\cubetexture.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Cube-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.584 DEBUG: Loading Models From [resources/models/VisualCollision/CollisionCube.json]
|
192:07:2026 01:57:48.657 DEBUG: Loading Models From [resources/models/VisualCollision/CollisionCube.json]
|
||||||
191:07:2026 14:40:19.585 DEBUG: Loaded Model Data: [ModelData[ID=CollisionCube, Meshes=[MeshData[ID=mesh_0, MaterialID=CollisionCube-mat-1, OffsetVertex=0, VertexSize=1344, OffsetIndex=0, IndexSize=144]], VertexPath=resources/models/VisualCollision/CollisionCube.vtx, IndexPath=resources/models/VisualCollision/CollisionCube.idx]]
|
192:07:2026 01:57:48.658 DEBUG: Loaded Model Data: [ModelData[ID=CollisionCube, Meshes=[MeshData[ID=mesh_0, MaterialID=CollisionCube-mat-1, OffsetVertex=0, VertexSize=1344, OffsetIndex=0, IndexSize=144]], VertexPath=resources/models/VisualCollision/CollisionCube.vtx, IndexPath=resources/models/VisualCollision/CollisionCube.idx]]
|
||||||
191:07:2026 14:40:19.586 DEBUG: Loading Materials From [resources/models/VisualCollision/CollisionCube_mat.json]
|
192:07:2026 01:57:48.659 DEBUG: Loading Materials From [resources/models/VisualCollision/CollisionCube_mat.json]
|
||||||
191:07:2026 14:40:19.588 DEBUG: Loaded Material Data: [[MaterialData[ID=CollisionCube-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=CollisionCube-mat-1, TexturePath=resources\models\VisualCollision\CollisionCubeTexture.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=CollisionCube-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.660 DEBUG: Loaded Material Data: [[MaterialData[ID=CollisionCube-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=CollisionCube-mat-1, TexturePath=resources\models\VisualCollision\CollisionCubeTexture.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=CollisionCube-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.588 DEBUG: Loading Models From [resources/models/melona/melona.json]
|
192:07:2026 01:57:48.660 DEBUG: Loading Models From [resources/models/melona/melona.json]
|
||||||
191:07:2026 14:40:19.588 DEBUG: Loaded Model Data: [ModelData[ID=melona, Meshes=[MeshData[ID=m_6d7d0384-980c-6574-37d9-8a8b11a5fdda_0, MaterialID=melona-mat-1, OffsetVertex=0, VertexSize=24192, OffsetIndex=0, IndexSize=2640], MeshData[ID=none_1, MaterialID=melona-mat-2, OffsetVertex=24192, VertexSize=672, OffsetIndex=2640, IndexSize=96]], VertexPath=resources/models/melona/melona.vtx, IndexPath=resources/models/melona/melona.idx]]
|
192:07:2026 01:57:48.661 DEBUG: Loaded Model Data: [ModelData[ID=melona, Meshes=[MeshData[ID=m_6d7d0384-980c-6574-37d9-8a8b11a5fdda_0, MaterialID=melona-mat-1, OffsetVertex=0, VertexSize=24192, OffsetIndex=0, IndexSize=2640], MeshData[ID=none_1, MaterialID=melona-mat-2, OffsetVertex=24192, VertexSize=672, OffsetIndex=2640, IndexSize=96]], VertexPath=resources/models/melona/melona.vtx, IndexPath=resources/models/melona/melona.idx]]
|
||||||
191:07:2026 14:40:19.588 DEBUG: Loading Materials From [resources/models/melona/melona_mat.json]
|
192:07:2026 01:57:48.661 DEBUG: Loading Materials From [resources/models/melona/melona_mat.json]
|
||||||
191:07:2026 14:40:19.589 DEBUG: Loaded Material Data: [[MaterialData[ID=melona-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=melona-mat-1, TexturePath=resources\models\melona\Melonamodel.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=melona-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.662 DEBUG: Loaded Material Data: [[MaterialData[ID=melona-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=melona-mat-1, TexturePath=resources\models\melona\Melonamodel.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=melona-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.590 DEBUG: Loading Models From [resources/models/musket/musket.json]
|
192:07:2026 01:57:48.662 DEBUG: Loading Models From [resources/models/musket/musket.json]
|
||||||
191:07:2026 14:40:19.590 DEBUG: Loaded Model Data: [ModelData[ID=musket, Meshes=[MeshData[ID=cube_0, MaterialID=musket-mat-1, OffsetVertex=0, VertexSize=25088, OffsetIndex=0, IndexSize=2880]], VertexPath=resources/models/musket/musket.vtx, IndexPath=resources/models/musket/musket.idx]]
|
192:07:2026 01:57:48.663 DEBUG: Loaded Model Data: [ModelData[ID=musket, Meshes=[MeshData[ID=cube_0, MaterialID=musket-mat-1, OffsetVertex=0, VertexSize=25088, OffsetIndex=0, IndexSize=2880]], VertexPath=resources/models/musket/musket.vtx, IndexPath=resources/models/musket/musket.idx]]
|
||||||
191:07:2026 14:40:19.590 DEBUG: Loading Materials From [resources/models/musket/musket_mat.json]
|
192:07:2026 01:57:48.663 DEBUG: Loading Materials From [resources/models/musket/musket_mat.json]
|
||||||
191:07:2026 14:40:19.591 DEBUG: Loaded Material Data: [[MaterialData[ID=musket-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=musket-mat-1, TexturePath=resources\models\musket\Musket.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=musket-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.665 DEBUG: Loaded Material Data: [[MaterialData[ID=musket-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=musket-mat-1, TexturePath=resources\models\musket\Musket.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=musket-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.591 DEBUG: Loading Models From [resources/models/Revolver/Revolver.json]
|
192:07:2026 01:57:48.665 DEBUG: Loading Models From [resources/models/Revolver/Revolver.json]
|
||||||
191:07:2026 14:40:19.592 DEBUG: Loaded Model Data: [ModelData[ID=Revolver, Meshes=[MeshData[ID=cube_0, MaterialID=Revolver-mat-1, OffsetVertex=0, VertexSize=21280, OffsetIndex=0, IndexSize=2304]], VertexPath=resources/models/Revolver/Revolver.vtx, IndexPath=resources/models/Revolver/Revolver.idx]]
|
192:07:2026 01:57:48.666 DEBUG: Loaded Model Data: [ModelData[ID=Revolver, Meshes=[MeshData[ID=cube_0, MaterialID=Revolver-mat-1, OffsetVertex=0, VertexSize=21280, OffsetIndex=0, IndexSize=2304]], VertexPath=resources/models/Revolver/Revolver.vtx, IndexPath=resources/models/Revolver/Revolver.idx]]
|
||||||
191:07:2026 14:40:19.592 DEBUG: Loading Materials From [resources/models/Revolver/Revolver_mat.json]
|
192:07:2026 01:57:48.666 DEBUG: Loading Materials From [resources/models/Revolver/Revolver_mat.json]
|
||||||
191:07:2026 14:40:19.593 DEBUG: Loaded Material Data: [[MaterialData[ID=Revolver-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Revolver-mat-1, TexturePath=resources\models\Revolver\Revolver.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Revolver-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.668 DEBUG: Loaded Material Data: [[MaterialData[ID=Revolver-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Revolver-mat-1, TexturePath=resources\models\Revolver\Revolver.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Revolver-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.593 DEBUG: Loading Models From [resources/models/Flintlock/Flintlock.json]
|
192:07:2026 01:57:48.668 DEBUG: Loading Models From [resources/models/Flintlock/Flintlock.json]
|
||||||
191:07:2026 14:40:19.594 DEBUG: Loaded Model Data: [ModelData[ID=Flintlock, Meshes=[MeshData[ID=cube_0, MaterialID=Flintlock-mat-1, OffsetVertex=0, VertexSize=19936, OffsetIndex=0, IndexSize=2160]], VertexPath=resources/models/Flintlock/Flintlock.vtx, IndexPath=resources/models/Flintlock/Flintlock.idx]]
|
192:07:2026 01:57:48.668 DEBUG: Loaded Model Data: [ModelData[ID=Flintlock, Meshes=[MeshData[ID=cube_0, MaterialID=Flintlock-mat-1, OffsetVertex=0, VertexSize=19936, OffsetIndex=0, IndexSize=2160]], VertexPath=resources/models/Flintlock/Flintlock.vtx, IndexPath=resources/models/Flintlock/Flintlock.idx]]
|
||||||
191:07:2026 14:40:19.594 DEBUG: Loading Materials From [resources/models/Flintlock/Flintlock_mat.json]
|
192:07:2026 01:57:48.668 DEBUG: Loading Materials From [resources/models/Flintlock/Flintlock_mat.json]
|
||||||
191:07:2026 14:40:19.595 DEBUG: Loaded Material Data: [[MaterialData[ID=Flintlock-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Flintlock-mat-1, TexturePath=resources\models\Flintlock\Flintlock.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Flintlock-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
192:07:2026 01:57:48.669 DEBUG: Loaded Material Data: [[MaterialData[ID=Flintlock-mat-0, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Flintlock-mat-1, TexturePath=resources\models\Flintlock\Flintlock.png, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0], MaterialData[ID=Flintlock-mat-2, TexturePath=, NormalTexturePath=, MetalRoughnessMap=, DiffuseColour=( 6.000E-1 6.000E-1 6.000E-1 1.000E+0), Roughness=0.0, Metallic=0.0]]]
|
||||||
191:07:2026 14:40:19.599 INFO: Spawning static cube actor [MelonaSpawned0] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.673 INFO: Spawning static cube actor [MelonaSpawned0] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.629 INFO: Spawning static cube actor [MelonaSpawned1] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.694 INFO: Spawning static cube actor [MelonaSpawned1] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.629 INFO: Spawning static cube actor [MelonaSpawned2] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.694 INFO: Spawning static cube actor [MelonaSpawned2] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.629 INFO: Spawning static cube actor [MelonaSpawned3] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.694 INFO: Spawning static cube actor [MelonaSpawned3] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.629 INFO: Spawning static cube actor [MelonaSpawned4] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.694 INFO: Spawning static cube actor [MelonaSpawned4] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.630 INFO: Spawning static cube actor [MelonaSpawned5] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned5] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.630 INFO: Spawning static cube actor [MelonaSpawned6] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned6] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.630 INFO: Spawning static cube actor [MelonaSpawned7] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned7] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.631 INFO: Spawning static cube actor [MelonaSpawned8] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned8] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.631 INFO: Spawning static cube actor [MelonaSpawned9] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned9] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.631 INFO: Spawning static cube actor [MelonaSpawned10] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned10] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.631 INFO: Spawning static cube actor [MelonaSpawned11] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.695 INFO: Spawning static cube actor [MelonaSpawned11] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.631 INFO: Spawning static cube actor [MelonaSpawned12] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned12] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.632 INFO: Spawning static cube actor [MelonaSpawned13] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned13] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.632 INFO: Spawning static cube actor [MelonaSpawned14] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned14] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.632 INFO: Spawning static cube actor [MelonaSpawned15] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned15] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.632 INFO: Spawning static cube actor [MelonaSpawned16] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned16] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.632 INFO: Spawning static cube actor [MelonaSpawned17] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned17] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.633 INFO: Spawning static cube actor [MelonaSpawned18] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned18] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.633 INFO: Spawning static cube actor [MelonaSpawned19] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.696 INFO: Spawning static cube actor [MelonaSpawned19] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.633 INFO: Spawning static cube actor [MelonaSpawned20] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned20] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.633 INFO: Spawning static cube actor [MelonaSpawned21] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned21] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.634 INFO: Spawning static cube actor [MelonaSpawned22] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned22] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.634 INFO: Spawning static cube actor [MelonaSpawned23] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned23] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.634 INFO: Spawning static cube actor [MelonaSpawned24] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned24] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.634 INFO: Spawning static cube actor [MelonaSpawned25] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned25] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned26] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.697 INFO: Spawning static cube actor [MelonaSpawned26] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned27] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned27] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned28] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned28] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned29] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned29] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned30] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned30] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned31] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned31] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned32] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned32] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.635 INFO: Spawning static cube actor [MelonaSpawned33] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned33] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned34] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned34] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned35] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned35] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned36] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned36] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned37] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned37] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned38] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned38] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned39] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.698 INFO: Spawning static cube actor [MelonaSpawned39] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.636 INFO: Spawning static cube actor [MelonaSpawned40] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned40] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.637 INFO: Spawning static cube actor [MelonaSpawned41] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned41] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.637 INFO: Spawning static cube actor [MelonaSpawned42] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned42] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.637 INFO: Spawning static cube actor [MelonaSpawned43] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned43] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.637 INFO: Spawning static cube actor [MelonaSpawned44] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned44] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.637 INFO: Spawning static cube actor [MelonaSpawned45] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned45] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned46] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned46] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned47] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned47] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned48] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned48] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned49] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned49] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned50] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned50] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.638 INFO: Spawning static cube actor [MelonaSpawned51] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned51] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned52] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned52] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned53] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.699 INFO: Spawning static cube actor [MelonaSpawned53] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned54] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned54] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned55] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned55] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned56] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned56] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned57] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned57] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned58] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned58] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.639 INFO: Spawning static cube actor [MelonaSpawned59] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned59] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned60] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned60] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned61] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned61] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned62] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned62] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned63] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned63] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned64] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.700 INFO: Spawning static cube actor [MelonaSpawned64] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned65] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned65] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.641 INFO: Spawning static cube actor [MelonaSpawned66] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned66] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned67] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned67] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned68] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned68] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned69] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned69] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned70] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned70] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned71] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned71] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned72] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.701 INFO: Spawning static cube actor [MelonaSpawned72] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned73] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned73] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.642 INFO: Spawning static cube actor [MelonaSpawned74] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned74] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.643 INFO: Spawning static cube actor [MelonaSpawned75] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned75] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.643 INFO: Spawning static cube actor [MelonaSpawned76] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned76] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.643 INFO: Spawning static cube actor [MelonaSpawned77] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned77] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.643 INFO: Spawning static cube actor [MelonaSpawned78] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned78] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.643 INFO: Spawning static cube actor [MelonaSpawned79] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned79] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned80] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned80] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned81] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned81] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned82] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned82] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned83] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.702 INFO: Spawning static cube actor [MelonaSpawned83] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned84] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.703 INFO: Spawning static cube actor [MelonaSpawned84] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.644 INFO: Spawning static cube actor [MelonaSpawned85] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.703 INFO: Spawning static cube actor [MelonaSpawned85] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.645 INFO: Spawning static cube actor [MelonaSpawned86] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.703 INFO: Spawning static cube actor [MelonaSpawned86] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.645 INFO: Spawning static cube actor [MelonaSpawned87] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.703 INFO: Spawning static cube actor [MelonaSpawned87] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.645 INFO: Spawning static cube actor [MelonaSpawned88] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned88] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.645 INFO: Spawning static cube actor [MelonaSpawned89] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned89] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.645 INFO: Spawning static cube actor [MelonaSpawned90] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned90] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned91] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned91] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned92] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned92] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned93] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned93] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned94] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned94] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned95] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned95] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.646 INFO: Spawning static cube actor [MelonaSpawned96] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned96] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned97] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned97] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned98] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned98] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned99] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.704 INFO: Spawning static cube actor [MelonaSpawned99] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned100] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned100] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned101] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned101] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned102] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned102] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.647 INFO: Spawning static cube actor [MelonaSpawned103] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned103] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.648 INFO: Spawning static cube actor [MelonaSpawned104] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned104] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.648 INFO: Spawning static cube actor [MelonaSpawned105] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned105] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.648 INFO: Spawning static cube actor [MelonaSpawned106] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned106] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.648 INFO: Spawning static cube actor [MelonaSpawned107] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned107] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.648 INFO: Spawning static cube actor [MelonaSpawned108] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned108] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned109] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned109] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned110] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned110] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned111] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned111] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned112] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned112] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned113] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned113] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned114] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned114] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned115] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned115] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned116] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned116] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.649 INFO: Spawning static cube actor [MelonaSpawned117] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned117] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.650 INFO: Spawning static cube actor [MelonaSpawned118] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.705 INFO: Spawning static cube actor [MelonaSpawned118] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.650 INFO: Spawning static cube actor [MelonaSpawned119] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.706 INFO: Spawning static cube actor [MelonaSpawned119] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.650 INFO: Spawning static cube actor [MelonaSpawned120] with model ID [Cube], with cached ID of [Cube]
|
192:07:2026 01:57:48.706 INFO: Spawning static cube actor [MelonaSpawned120] with model ID [Cube], with cached ID of [Cube]
|
||||||
191:07:2026 14:40:19.655 DEBUG: Starting Main Thread
|
192:07:2026 01:57:48.709 DEBUG: Starting Main Thread
|
||||||
191:07:2026 14:40:19.656 DEBUG: Starting Fast Thread
|
192:07:2026 01:57:48.710 DEBUG: Starting Fast Thread
|
||||||
191:07:2026 14:40:19.656 DEBUG: Starting Render Thread
|
192:07:2026 01:57:48.710 DEBUG: Starting Render Thread
|
||||||
191:07:2026 14:40:19.662 INFO: Launched Terrain4J Engine
|
192:07:2026 01:57:48.924 INFO: Launched Terrain4J Engine
|
||||||
191:07:2026 14:40:19.662 DEBUG: Primary Thread Started
|
192:07:2026 01:57:48.924 DEBUG: Primary Thread Started
|
||||||
191:07:2026 14:40:19.662 INFO: Terrain4J dedicated server running without GLFW/Vulkan/OpenAL
|
192:07:2026 01:57:48.924 INFO: Terrain4J dedicated server running without GLFW/Vulkan/OpenAL
|
||||||
191:07:2026 14:40:19.662 DEBUG: Main Thread Started
|
192:07:2026 01:57:48.924 DEBUG: Main Thread Started
|
||||||
191:07:2026 14:40:19.662 DEBUG: Render Thread Started
|
192:07:2026 01:57:48.924 DEBUG: Render Thread Started
|
||||||
191:07:2026 14:40:19.662 DEBUG: Fast Thread Started
|
192:07:2026 01:57:48.924 DEBUG: Fast Thread Started
|
||||||
|
|
|
||||||
BIN
resources/EngineResources/audio/music/WildWestIntroTheme.ogg
Normal file
BIN
resources/EngineResources/audio/music/WildWestIntroTheme.ogg
Normal file
Binary file not shown.
|
|
@ -56,7 +56,7 @@ public class Server {
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
Configuration.set("writer.file", "ServerLog.t4jlog");
|
Configuration.set("writer.file", "ServerLog.t4jlog");
|
||||||
|
|
||||||
ServerSocket server = new ServerSocket(25565);
|
ServerSocket server = new ServerSocket(ServerConnectionThread.ServerPort);
|
||||||
Logger.info("\nLaunching New Terrain4J Powered Software!");
|
Logger.info("\nLaunching New Terrain4J Powered Software!");
|
||||||
|
|
||||||
RenderThread.Headless = true;
|
RenderThread.Headless = true;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput;
|
||||||
import net.halbear.Terrain4J.EngineCore.Input.MouseListener;
|
import net.halbear.Terrain4J.EngineCore.Input.MouseListener;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
import org.lwjgl.glfw.GLFWImage;
|
import org.lwjgl.glfw.GLFWImage;
|
||||||
import org.lwjgl.glfw.GLFWVidMode;
|
import org.lwjgl.glfw.GLFWVidMode;
|
||||||
import org.lwjgl.glfw.GLFWWindowFocusCallback;
|
import org.lwjgl.glfw.GLFWWindowFocusCallback;
|
||||||
|
|
@ -54,7 +55,7 @@ public class Window {
|
||||||
if (glfwRawMouseMotionSupported()) {
|
if (glfwRawMouseMotionSupported()) {
|
||||||
glfwSetInputMode(handle, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE);
|
glfwSetInputMode(handle, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE);
|
||||||
}
|
}
|
||||||
LockCursor();
|
//LockCursor();
|
||||||
if (handle == MemoryUtil.NULL) {
|
if (handle == MemoryUtil.NULL) {
|
||||||
//throw new RuntimeException("Failed to create the GLFW window");
|
//throw new RuntimeException("Failed to create the GLFW window");
|
||||||
}
|
}
|
||||||
|
|
@ -106,11 +107,11 @@ public class Window {
|
||||||
|
|
||||||
public void LockCursor(){
|
public void LockCursor(){
|
||||||
CursorLocked = true;
|
CursorLocked = true;
|
||||||
glfwSetInputMode(handle, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
// glfwSetInputMode(handle, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||||
}
|
}
|
||||||
public void UnlockCursor(){
|
public void UnlockCursor(){
|
||||||
CursorLocked = false;
|
CursorLocked = false;
|
||||||
glfwSetInputMode(handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
//glfwSetInputMode(handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
|
|
@ -138,6 +139,14 @@ public class Window {
|
||||||
}
|
}
|
||||||
keyboardInput.input();
|
keyboardInput.input();
|
||||||
mouseInput.input();
|
mouseInput.input();
|
||||||
|
/* if(CursorLocked) {
|
||||||
|
int[] width = new int[1];
|
||||||
|
int[] height = new int[1];
|
||||||
|
glfwGetWindowSize(handle, width, height);
|
||||||
|
double centerX = width[0] / 2.0;
|
||||||
|
double centerY = height[0] / 2.0;
|
||||||
|
glfwSetCursorPos(handle, centerX, centerY);
|
||||||
|
}*/
|
||||||
EngineConfig.RENDERFRAMES++;
|
EngineConfig.RENDERFRAMES++;
|
||||||
}
|
}
|
||||||
public void UpdateWindowTitle(){
|
public void UpdateWindowTitle(){
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,8 @@ public class EngineConfig {
|
||||||
public float WeaponVolume = 1.0f;
|
public float WeaponVolume = 1.0f;
|
||||||
public float AmbientVolume = 1.0f;
|
public float AmbientVolume = 1.0f;
|
||||||
|
|
||||||
|
public float PlayerOnline = 1.0f;
|
||||||
|
|
||||||
public float PhysicsSpeed(){return PhysicsSpeed;}
|
public float PhysicsSpeed(){return PhysicsSpeed;}
|
||||||
public void SetPhysicsSpeed(float NewSpeed){PhysicsSpeed =NewSpeed;}
|
public void SetPhysicsSpeed(float NewSpeed){PhysicsSpeed =NewSpeed;}
|
||||||
|
|
||||||
|
|
@ -366,3 +368,6 @@ public class EngineConfig {
|
||||||
return IconPath + IconName;
|
return IconPath + IconName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,7 @@ import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsCont
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager;
|
import net.halbear.Terrain4J.EngineCore.Logic.Physics.WorldPhysicsManager;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.ModelLoader;
|
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.ModelLoader;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.*;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.*;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.Gimbal;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.*;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.LoadingScreen;
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.SettingsMenu;
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu;
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Profiling.CPUMonitor;
|
import net.halbear.Terrain4J.EngineCore.Profiling.CPUMonitor;
|
||||||
import net.halbear.Terrain4J.EngineCore.Profiling.GPUProfiler;
|
import net.halbear.Terrain4J.EngineCore.Profiling.GPUProfiler;
|
||||||
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
|
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
|
||||||
|
|
@ -45,6 +42,7 @@ import org.tinylog.Logger;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.lwjgl.glfw.GLFW.*;
|
import static org.lwjgl.glfw.GLFW.*;
|
||||||
|
|
@ -73,6 +71,7 @@ public class GameCore implements GameLogic {
|
||||||
private LoadingScreen loadingScreen;
|
private LoadingScreen loadingScreen;
|
||||||
public final StartMenu startMenu = new StartMenu();
|
public final StartMenu startMenu = new StartMenu();
|
||||||
public final SettingsMenu Settings = new SettingsMenu();
|
public final SettingsMenu Settings = new SettingsMenu();
|
||||||
|
public final CreditsMenu Credits = new CreditsMenu();
|
||||||
public boolean StartMenuActive = true;
|
public boolean StartMenuActive = true;
|
||||||
public List<IMoveableActorComponent> ActorEditorComponents = new ArrayList<>();
|
public List<IMoveableActorComponent> ActorEditorComponents = new ArrayList<>();
|
||||||
private Vector2f DeltaPos = new Vector2f(0,0);
|
private Vector2f DeltaPos = new Vector2f(0,0);
|
||||||
|
|
@ -170,6 +169,8 @@ public class GameCore implements GameLogic {
|
||||||
SpawnNewActor(engineInstance, new Vector3f(-5 + (float)Math.random() * 10,10 + (float)Math.random() * 10, -5 + (float)Math.random() * 10), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1));
|
SpawnNewActor(engineInstance, new Vector3f(-5 + (float)Math.random() * 10,10 + (float)Math.random() * 10, -5 + (float)Math.random() * 10), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Settings.textBuffer.set(ClientConnectionThread.ServerIP);
|
||||||
|
Settings.UsernameBuffer.set("Player");
|
||||||
return new InitData(models,materials,guiTextures);
|
return new InitData(models,materials,guiTextures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,7 +316,7 @@ public class GameCore implements GameLogic {
|
||||||
LastMousePos.y = CurrentMousePos.y;
|
LastMousePos.y = CurrentMousePos.y;
|
||||||
if(MouseInput.isRightButtonPressed()){
|
if(MouseInput.isRightButtonPressed()){
|
||||||
|
|
||||||
camera.AddRotation((float)Math.toRadians(-deltaPos.y * Multiplier),(float)Math.toRadians(-deltaPos.x * Multiplier),0);
|
camera.AddRotation((float)Math.toRadians(deltaPos.y * Multiplier),(float)Math.toRadians(deltaPos.x * Multiplier),0);
|
||||||
}
|
}
|
||||||
DeltaPos = new Vector2f(deltaPos);
|
DeltaPos = new Vector2f(deltaPos);
|
||||||
engineInstance.audioManager().UpdateListenerPosition(camera);
|
engineInstance.audioManager().UpdateListenerPosition(camera);
|
||||||
|
|
@ -420,6 +421,7 @@ public class GameCore implements GameLogic {
|
||||||
} else if (StartMenuActive) {
|
} else if (StartMenuActive) {
|
||||||
startMenu.RenderGUI(engineInstance, frameTimeNS, this);
|
startMenu.RenderGUI(engineInstance, frameTimeNS, this);
|
||||||
Settings.RenderGUI(engineInstance, frameTimeNS, this);
|
Settings.RenderGUI(engineInstance, frameTimeNS, this);
|
||||||
|
Credits.RenderGUI(engineInstance, frameTimeNS, this);
|
||||||
if (startMenu.GameStarted && !StartMenu.ShowSettings) {
|
if (startMenu.GameStarted && !StartMenu.ShowSettings) {
|
||||||
StartMenuActive = false;
|
StartMenuActive = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ public class PrimaryRuntime {
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {;
|
timer.scheduleAtFixedRate(new TimerTask() {;
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String text = "Halbear.Net Launcher : " + PingServer(ClientConnectionThread.ServerIP, false);
|
String text = "Pinging : " + PingServer(ClientConnectionThread.ServerIP, false);
|
||||||
if (ClientConnectionThread.Connected){
|
if (ClientConnectionThread.Connected){
|
||||||
ClientConnectionThread.pinging = false;
|
ClientConnectionThread.pinging = false;
|
||||||
this.cancel();
|
this.cancel();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs;
|
||||||
|
|
||||||
|
import imgui.ImDrawList;
|
||||||
|
import imgui.ImGui;
|
||||||
|
import imgui.ImGuiViewport;
|
||||||
|
import imgui.ImVec2;
|
||||||
|
import imgui.flag.ImGuiCol;
|
||||||
|
import imgui.flag.ImGuiCond;
|
||||||
|
import imgui.flag.ImGuiStyleVar;
|
||||||
|
import imgui.flag.ImGuiWindowFlags;
|
||||||
|
import imgui.type.ImInt;
|
||||||
|
import imgui.type.ImString;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Main.AudioInstance;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Main.GameCore;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
public class CreditsMenu implements GUIOverlay {
|
||||||
|
public int[] Music = new int[]{100};
|
||||||
|
public int[] SFX = new int[]{100};
|
||||||
|
public int[] Weapons = new int[]{100};
|
||||||
|
public int[] Ambient = new int[]{100};
|
||||||
|
public ImInt ServerPort = new ImInt(25565);
|
||||||
|
public final ImString textBuffer = new ImString(100);
|
||||||
|
public final ImString UsernameBuffer = new ImString(24);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
|
||||||
|
if (!StartMenu.ShowCredits) return;
|
||||||
|
ImGuiViewport viewport = ImGui.getMainViewport();
|
||||||
|
int menuFlags = ImGuiWindowFlags.NoDecoration
|
||||||
|
| ImGuiWindowFlags.AlwaysAutoResize
|
||||||
|
| ImGuiWindowFlags.NoSavedSettings
|
||||||
|
| ImGuiWindowFlags.NoFocusOnAppearing
|
||||||
|
| ImGuiWindowFlags.NoNav
|
||||||
|
| ImGuiWindowFlags.NoMove;
|
||||||
|
|
||||||
|
float CenterX = viewport.getWorkPosX() + viewport.getWorkSizeX() / 2.0f;
|
||||||
|
float CenterY = viewport.getWorkPosY() + viewport.getWorkSizeY() / 2.0f;
|
||||||
|
ImGui.setNextWindowPos(viewport.getWorkPosX(), viewport.getWorkPosY(), ImGuiCond.Always);
|
||||||
|
ImGui.setNextWindowSize(viewport.getWorkSizeX(), viewport.getWorkSizeY());
|
||||||
|
ImGui.pushStyleColor(ImGuiCol.WindowBg, 0.08f, 0.08f, 0.1f, 1.0f);
|
||||||
|
ImGui.pushStyleVar(ImGuiStyleVar.WindowPadding, 40f, 30f);
|
||||||
|
ImGui.pushStyleVar(ImGuiStyleVar.ItemSpacing, 10f, 16f);
|
||||||
|
ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 8f);
|
||||||
|
|
||||||
|
ImGui.begin("Start Menu", menuFlags);
|
||||||
|
if (ImGui.button("Main Menu")) {
|
||||||
|
StartMenu.ShowSettings = false;
|
||||||
|
StartMenu.GameStarted = false;
|
||||||
|
StartMenu.ShowCredits = false;
|
||||||
|
}
|
||||||
|
ImGui.setWindowFontScale(8.0f);
|
||||||
|
float titleX = (viewport.getWorkSizeX() - ImGui.calcTextSize("Shooter Game").x) / 2.0f;
|
||||||
|
float titleY = viewport.getWorkSizeY() * 0.15f;
|
||||||
|
ImGui.setCursorPos(titleX, titleY);
|
||||||
|
ImGui.text("Game Credits");
|
||||||
|
ImGui.setWindowFontScale(3.0f);
|
||||||
|
ImGui.spacing();
|
||||||
|
ImGui.spacing();
|
||||||
|
String[] Text = new String[]{"Game Engine Development","Harrison Corlett","Christian Lincoln","","Game Programming","Harrison Corlett","William Allen","","Art & Level Design","Harrison Corlett","","Music","Kevin Macleod - Incompetech","Luis Humanoide - Freesound.org","Flower Mantis - Freesound.org"};
|
||||||
|
for(int i = 0; i < Text.length; i++) {
|
||||||
|
String text = Text[i];
|
||||||
|
float rightEdge = ImGui.getMainViewport().getPos().x + ImGui.getMainViewport().getSize().x / 2;
|
||||||
|
ImVec2 textSize = new ImVec2();
|
||||||
|
ImGui.calcTextSize(textSize, text);
|
||||||
|
float textWidth = textSize.x;
|
||||||
|
float targetX = rightEdge - textWidth / 2;
|
||||||
|
ImVec2 currentPos = new ImVec2();
|
||||||
|
ImGui.getCursorScreenPos(currentPos);
|
||||||
|
ImGui.setCursorScreenPos(targetX, currentPos.y);
|
||||||
|
ImGui.text(text);
|
||||||
|
}
|
||||||
|
ImGui.end();
|
||||||
|
ImGui.popStyleVar(3);
|
||||||
|
ImGui.popStyleColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs;
|
package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs;
|
||||||
|
|
||||||
|
import imgui.ImDrawList;
|
||||||
import imgui.ImGui;
|
import imgui.ImGui;
|
||||||
import imgui.ImGuiViewport;
|
import imgui.ImGuiViewport;
|
||||||
|
import imgui.ImVec2;
|
||||||
import imgui.flag.ImGuiCol;
|
import imgui.flag.ImGuiCol;
|
||||||
import imgui.flag.ImGuiCond;
|
import imgui.flag.ImGuiCond;
|
||||||
import imgui.flag.ImGuiStyleVar;
|
import imgui.flag.ImGuiStyleVar;
|
||||||
import imgui.flag.ImGuiWindowFlags;
|
import imgui.flag.ImGuiWindowFlags;
|
||||||
|
import imgui.type.ImInt;
|
||||||
|
import imgui.type.ImString;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.AudioInstance;
|
import net.halbear.Terrain4J.EngineCore.Main.AudioInstance;
|
||||||
|
|
@ -13,6 +17,7 @@ import net.halbear.Terrain4J.EngineCore.Main.GameCore;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
@ -22,6 +27,9 @@ public class SettingsMenu implements GUIOverlay {
|
||||||
public int[] SFX = new int[]{100};
|
public int[] SFX = new int[]{100};
|
||||||
public int[] Weapons = new int[]{100};
|
public int[] Weapons = new int[]{100};
|
||||||
public int[] Ambient = new int[]{100};
|
public int[] Ambient = new int[]{100};
|
||||||
|
public ImInt ServerPort = new ImInt(25565);
|
||||||
|
public final ImString textBuffer = new ImString(100);
|
||||||
|
public final ImString UsernameBuffer = new ImString(24);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
|
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
|
||||||
|
|
@ -44,6 +52,7 @@ public class SettingsMenu implements GUIOverlay {
|
||||||
ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 8f);
|
ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 8f);
|
||||||
|
|
||||||
ImGui.begin("Start Menu", menuFlags);
|
ImGui.begin("Start Menu", menuFlags);
|
||||||
|
ImDrawList drawList = ImGui.getForegroundDrawList();
|
||||||
ImGui.setWindowFontScale(4.0f);
|
ImGui.setWindowFontScale(4.0f);
|
||||||
if (ImGui.button("Return")) {
|
if (ImGui.button("Return")) {
|
||||||
StartMenu.ShowSettings = false;
|
StartMenu.ShowSettings = false;
|
||||||
|
|
@ -58,10 +67,47 @@ public class SettingsMenu implements GUIOverlay {
|
||||||
StartMenu.GameStarted = false;
|
StartMenu.GameStarted = false;
|
||||||
}
|
}
|
||||||
ImGui.sameLine();
|
ImGui.sameLine();
|
||||||
|
int color = ImGui.getColorU32(ClientConnectionThread.Connected ? 0.0f : 1.0f, ClientConnectionThread.Connected ? 1.0f : 0.0f, 0.0f, 1.0f);
|
||||||
|
String text = ClientConnectionThread.Connected ? "ONLINE" : "OFFLINE";
|
||||||
|
float rightEdge = ImGui.getMainViewport().getPos().x + ImGui.getMainViewport().getSize().x;
|
||||||
|
ImVec2 textSize = new ImVec2();
|
||||||
|
ImGui.calcTextSize(textSize, text);
|
||||||
|
float textWidth = textSize.x;
|
||||||
|
float targetX = rightEdge - textWidth - (textSize.y * 2);
|
||||||
|
|
||||||
|
ImVec2 currentPos = new ImVec2();
|
||||||
|
ImGui.getCursorScreenPos(currentPos);
|
||||||
|
ImGui.setCursorScreenPos(targetX, currentPos.y);
|
||||||
|
|
||||||
|
ImGui.text(text);
|
||||||
|
drawList.addCircleFilled(rightEdge - (textSize.y), currentPos.y + textSize.y/2, textSize.y/2, color);
|
||||||
|
|
||||||
ImGui.text("Settings");
|
ImGui.text("Settings");
|
||||||
ImGui.setWindowFontScale(3f);
|
ImGui.setWindowFontScale(3f);
|
||||||
ImGui.spacing();
|
ImGui.spacing();
|
||||||
if (ImGui.beginTabBar("Settings")) {
|
if (ImGui.beginTabBar("Settings")) {
|
||||||
|
if (ImGui.beginTabItem("Multiplayer")) {
|
||||||
|
ImGui.setWindowFontScale(4.0f);
|
||||||
|
ImGui.text("Multiplayer Settings");
|
||||||
|
ImGui.setWindowFontScale(3f);
|
||||||
|
ImGui.text("User Configuration");
|
||||||
|
if (ImGui.inputText("Player Username", UsernameBuffer)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
ImGui.text("Server Configuration");
|
||||||
|
if (ImGui.inputText("Server IP Address", textBuffer)) {
|
||||||
|
ClientConnectionThread.ServerIP = textBuffer.get();
|
||||||
|
}
|
||||||
|
if (ImGui.inputInt("Server Port", ServerPort)) {
|
||||||
|
ClientConnectionThread.ServerPort = ServerPort.get();
|
||||||
|
}
|
||||||
|
ImGui.text("Players Online: " + (ClientConnectionThread.Connected ? ClientConnectionThread.PlayersOnline : "Not Connected to Server"));
|
||||||
|
ImGui.text("Client UUID: " + (ClientConnectionThread.Connected ? ClientConnectionThread.clientUUID : "Not Connected to Server"));
|
||||||
|
if (ImGui.button("Apply and reconnect")) {
|
||||||
|
|
||||||
|
}
|
||||||
|
ImGui.endTabItem();
|
||||||
|
}
|
||||||
if (ImGui.beginTabItem("Audio")) {
|
if (ImGui.beginTabItem("Audio")) {
|
||||||
ImGui.setWindowFontScale(4.0f);
|
ImGui.setWindowFontScale(4.0f);
|
||||||
ImGui.text("Audio Settings");
|
ImGui.text("Audio Settings");
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import org.tinylog.Logger;
|
||||||
public class StartMenu implements GUIOverlay {
|
public class StartMenu implements GUIOverlay {
|
||||||
public static boolean GameStarted = false;
|
public static boolean GameStarted = false;
|
||||||
public static boolean ShowSettings = false;
|
public static boolean ShowSettings = false;
|
||||||
|
public static boolean ShowCredits = false;
|
||||||
public float Volume = 1.0f;
|
public float Volume = 1.0f;
|
||||||
|
|
||||||
private void ApplyVolume(EngineInstance engineInstance) {
|
private void ApplyVolume(EngineInstance engineInstance) {
|
||||||
|
|
@ -35,7 +36,7 @@ public class StartMenu implements GUIOverlay {
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
|
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
|
||||||
if (GameStarted || ShowSettings) return;
|
if (GameStarted || ShowSettings || ShowCredits) return;
|
||||||
ImGuiViewport viewport = ImGui.getMainViewport();
|
ImGuiViewport viewport = ImGui.getMainViewport();
|
||||||
int menuFlags = ImGuiWindowFlags.NoDecoration
|
int menuFlags = ImGuiWindowFlags.NoDecoration
|
||||||
| ImGuiWindowFlags.AlwaysAutoResize
|
| ImGuiWindowFlags.AlwaysAutoResize
|
||||||
|
|
@ -77,6 +78,10 @@ public class StartMenu implements GUIOverlay {
|
||||||
ShowSettings = true;
|
ShowSettings = true;
|
||||||
}
|
}
|
||||||
ImGui.setCursorPosX(buttonX);
|
ImGui.setCursorPosX(buttonX);
|
||||||
|
if (ImGui.button("Credits", buttonWidth, buttonHeight)) {
|
||||||
|
ShowCredits = true;
|
||||||
|
}
|
||||||
|
ImGui.setCursorPosX(buttonX);
|
||||||
if (ImGui.button("Quit", buttonWidth, buttonHeight)) {
|
if (ImGui.button("Quit", buttonWidth, buttonHeight)) {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,7 @@ public class Scene implements IScene {
|
||||||
} else {
|
} else {
|
||||||
CurrentWeapon.SetPositionOffset(new Vector3f(0.5f,1.15f,-1.25f));
|
CurrentWeapon.SetPositionOffset(new Vector3f(0.5f,1.15f,-1.25f));
|
||||||
}
|
}
|
||||||
if(mouseListener.isRightButtonPressed()) {
|
if(mouseListener.isLeftButtonPressed()) {
|
||||||
if (CurrentItem != null&& playerActor != null) {
|
if (CurrentItem != null&& playerActor != null) {
|
||||||
long NewTime = System.nanoTime();
|
long NewTime = System.nanoTime();
|
||||||
float FireRate = 1000f/CurrentItem.FireRate();
|
float FireRate = 1000f/CurrentItem.FireRate();
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import java.nio.charset.StandardCharsets;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class Packet {
|
public class Packet {
|
||||||
|
|
||||||
public static final byte PACKET_UPDATE_LOCATION = 0;
|
public static final byte PACKET_UPDATE_LOCATION = 0;
|
||||||
public static final byte PACKET_UPDATE_ROTATION = 1;
|
public static final byte PACKET_UPDATE_ROTATION = 1;
|
||||||
public static final byte PACKET_UPDATE_LINEAR_VELOCITY =2;
|
public static final byte PACKET_UPDATE_LINEAR_VELOCITY =2;
|
||||||
|
|
@ -22,7 +23,10 @@ public class Packet {
|
||||||
public static final byte PACKET_CLIENT_INPUT = 10;
|
public static final byte PACKET_CLIENT_INPUT = 10;
|
||||||
public static final byte PACKET_UPDATE_MODEL_ID = 11;
|
public static final byte PACKET_UPDATE_MODEL_ID = 11;
|
||||||
public static final byte PACKET_FIRE_WEAPON = 12;
|
public static final byte PACKET_FIRE_WEAPON = 12;
|
||||||
public byte PacketTypeByte; //0 Location 1 Rotation 2 LinearVelocity 3 AngularVelocity 4 CombinedActorDownload 5 Ping 6 PosRotVelAngularVel 7 AssignUUID
|
public static final byte PACKET_SEND_PLAYER_COUNT = 13;
|
||||||
|
public static final byte PACKET_UPDATE_PLAYER_DISPLAY_NAME = 14;
|
||||||
|
|
||||||
|
public byte PacketTypeByte;
|
||||||
public byte TargetType; //0 Actor
|
public byte TargetType; //0 Actor
|
||||||
public byte[] Data;
|
public byte[] Data;
|
||||||
public String TargetID;
|
public String TargetID;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package net.halbear.Terrain4J.EngineCore.Threads;
|
package net.halbear.Terrain4J.EngineCore.Threads;
|
||||||
|
|
||||||
|
import net.halbear.Executable.Server;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh;
|
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.ConvexMesh;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody;
|
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody;
|
||||||
|
|
@ -30,9 +31,10 @@ public class ClientConnectionThread implements Runnable{
|
||||||
public static final Queue<Packet> IncomingPacketQueue = new ConcurrentLinkedQueue<>();
|
public static final Queue<Packet> IncomingPacketQueue = new ConcurrentLinkedQueue<>();
|
||||||
public static DataOutputStream outToServer;
|
public static DataOutputStream outToServer;
|
||||||
public static DataInputStream in;
|
public static DataInputStream in;
|
||||||
public static long UUID;
|
public static String clientUUID;
|
||||||
public static String OwnedActorID = "NULL";
|
public static String OwnedActorID = "NULL";
|
||||||
public static String PendingPossessActorID = "NULL";
|
public static String PendingPossessActorID = "NULL";
|
||||||
|
public static int PlayersOnline = 0;
|
||||||
|
|
||||||
private static boolean TryPossessActor(String actorID, GameCore gameCore, IScene scene){
|
private static boolean TryPossessActor(String actorID, GameCore gameCore, IScene scene){
|
||||||
Actor actor = Actor.Actors.get(actorID);
|
Actor actor = Actor.Actors.get(actorID);
|
||||||
|
|
@ -90,7 +92,9 @@ public class ClientConnectionThread implements Runnable{
|
||||||
&& packet.PacketTypeByte != Packet.PACKET_CREATE_ACTOR
|
&& packet.PacketTypeByte != Packet.PACKET_CREATE_ACTOR
|
||||||
&& packet.PacketTypeByte != Packet.PACKET_PING
|
&& packet.PacketTypeByte != Packet.PACKET_PING
|
||||||
&& packet.PacketTypeByte != Packet.PACKET_POSSESS_ACTOR
|
&& packet.PacketTypeByte != Packet.PACKET_POSSESS_ACTOR
|
||||||
&& packet.PacketTypeByte != Packet.PACKET_DESTROY_ACTOR) {
|
&& packet.PacketTypeByte != Packet.PACKET_DESTROY_ACTOR
|
||||||
|
&& packet.PacketTypeByte != Packet.PACKET_ASSIGN_UUID
|
||||||
|
&& packet.PacketTypeByte != Packet.PACKET_SEND_PLAYER_COUNT) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,15 +245,26 @@ public class ClientConnectionThread implements Runnable{
|
||||||
actorToChangeModelID.SetModelID(stringdata);
|
actorToChangeModelID.SetModelID(stringdata);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Packet.PACKET_SEND_PLAYER_COUNT:
|
||||||
|
System.out.println("decoding player count packet");
|
||||||
|
stringdata = Packet.DecodeAsString(packet.Data);
|
||||||
|
PlayersOnline = Integer.parseInt(stringdata);
|
||||||
|
break;
|
||||||
|
case Packet.PACKET_ASSIGN_UUID:
|
||||||
|
System.out.println("decoding UUID packet");
|
||||||
|
clientUUID = Packet.DecodeAsString(packet.Data);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int ServerPort = 25565;
|
||||||
|
|
||||||
public ClientConnectionThread(){
|
public ClientConnectionThread(){
|
||||||
Connected = true;
|
Connected = true;
|
||||||
try {
|
try {
|
||||||
SocketToServer = new Socket(ServerIP, 25565);
|
SocketToServer = new Socket(ServerIP, ServerPort);
|
||||||
SocketToServer.setSoTimeout(5);
|
SocketToServer.setSoTimeout(5);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Connected = false;
|
Connected = false;
|
||||||
|
|
@ -267,6 +282,14 @@ public class ClientConnectionThread implements Runnable{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void RequestPlayerCount(){
|
||||||
|
Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT);
|
||||||
|
packet.SetTargetType((byte) 0);
|
||||||
|
packet.SetData(new byte[]{0});
|
||||||
|
packet.SetID("NULL");
|
||||||
|
OutGoingPacketQueue.add(packet);
|
||||||
|
}
|
||||||
|
|
||||||
public static void FireWeapon(String ActorID, float Damage){
|
public static void FireWeapon(String ActorID, float Damage){
|
||||||
Packet packet = new Packet(Packet.PACKET_FIRE_WEAPON);
|
Packet packet = new Packet(Packet.PACKET_FIRE_WEAPON);
|
||||||
packet.SetTargetType((byte) 0);
|
packet.SetTargetType((byte) 0);
|
||||||
|
|
@ -300,7 +323,6 @@ public class ClientConnectionThread implements Runnable{
|
||||||
if(in == null) return 0;
|
if(in == null) return 0;
|
||||||
|
|
||||||
Packet newIncomingPacket = new Packet(in.readByte());
|
Packet newIncomingPacket = new Packet(in.readByte());
|
||||||
|
|
||||||
if(newIncomingPacket.PacketTypeByte == 5) {
|
if(newIncomingPacket.PacketTypeByte == 5) {
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
@ -344,7 +366,7 @@ public class ClientConnectionThread implements Runnable{
|
||||||
try {
|
try {
|
||||||
PacketRead = readPacket(in);
|
PacketRead = readPacket(in);
|
||||||
} catch (SocketTimeoutException ignored) {
|
} catch (SocketTimeoutException ignored) {
|
||||||
// No incoming packet this moment. Continue so outgoing packets can still flush.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(PacketRead == Packet.PACKET_PING){
|
if(PacketRead == Packet.PACKET_PING){
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,20 @@ public class ServerConnectionThread implements Runnable{
|
||||||
private String OwnedActorID;
|
private String OwnedActorID;
|
||||||
private final Socket clientSocket;
|
private final Socket clientSocket;
|
||||||
private final UUID ClientID;
|
private final UUID ClientID;
|
||||||
|
private String PlayerDisplayName;
|
||||||
|
public static int PlayersOnline = 0;
|
||||||
|
|
||||||
|
public static int ServerPort = 25565;
|
||||||
|
|
||||||
public final Queue<Packet> IncomingPacketQueue = new ConcurrentLinkedQueue<>();
|
public final Queue<Packet> IncomingPacketQueue = new ConcurrentLinkedQueue<>();
|
||||||
public final Queue<Packet> OutgoingPacketQueue = new ConcurrentLinkedQueue<>();
|
public final Queue<Packet> OutgoingPacketQueue = new ConcurrentLinkedQueue<>();
|
||||||
|
|
||||||
|
public void SetPlayerDisplayName(String displayName){
|
||||||
|
this.PlayerDisplayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String GetPlayerDisplayName(){return PlayerDisplayName;}
|
||||||
|
|
||||||
public UUID GetClientID(){
|
public UUID GetClientID(){
|
||||||
return ClientID;
|
return ClientID;
|
||||||
}
|
}
|
||||||
|
|
@ -47,7 +57,6 @@ public class ServerConnectionThread implements Runnable{
|
||||||
UUID uuid = UUID.randomUUID();
|
UUID uuid = UUID.randomUUID();
|
||||||
ClientID = uuid;
|
ClientID = uuid;
|
||||||
this.clientSocket = clientSocket;
|
this.clientSocket = clientSocket;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.clientSocket.setSoTimeout(5);
|
this.clientSocket.setSoTimeout(5);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
@ -78,6 +87,8 @@ public class ServerConnectionThread implements Runnable{
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitialiseJoinedClient(){
|
private void InitialiseJoinedClient(){
|
||||||
|
Packet PlayerCountPacket = CreatePlayerCountPacket(Server.ConnectedClients.size());
|
||||||
|
Server.OutGoingPacketQueue.add(PlayerCountPacket);
|
||||||
EngineInstance engineInstance = PrimaryRuntime.GetEngineInstance();
|
EngineInstance engineInstance = PrimaryRuntime.GetEngineInstance();
|
||||||
IScene scene = engineInstance.scene();
|
IScene scene = engineInstance.scene();
|
||||||
|
|
||||||
|
|
@ -101,6 +112,8 @@ public class ServerConnectionThread implements Runnable{
|
||||||
|
|
||||||
BroadcastCreateActorPacket(player);
|
BroadcastCreateActorPacket(player);
|
||||||
SendPossessActorPacket(player.GetID());
|
SendPossessActorPacket(player.GetID());
|
||||||
|
Packet UUIDUpdatePacket = CreatePlayerUUIDPacket(ClientID,this);
|
||||||
|
Server.OutGoingPacketQueue.add(UUIDUpdatePacket);
|
||||||
System.out.println("Queued possess packet for joining player's actor: " + player.GetID());
|
System.out.println("Queued possess packet for joining player's actor: " + player.GetID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,7 +136,7 @@ public class ServerConnectionThread implements Runnable{
|
||||||
}
|
}
|
||||||
|
|
||||||
if(PacketRead == Packet.PACKET_PING){
|
if(PacketRead == Packet.PACKET_PING){
|
||||||
WritePacket(new Packet(Packet.PACKET_PING),out);
|
WritePacket(new Packet(Packet.PACKET_PING),out,this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(PacketRead == -1) break;
|
if(PacketRead == -1) break;
|
||||||
|
|
@ -131,10 +144,12 @@ public class ServerConnectionThread implements Runnable{
|
||||||
if(!OutgoingPacketQueue.isEmpty()){
|
if(!OutgoingPacketQueue.isEmpty()){
|
||||||
Packet packet;
|
Packet packet;
|
||||||
while((packet = OutgoingPacketQueue.poll()) != null) {
|
while((packet = OutgoingPacketQueue.poll()) != null) {
|
||||||
WritePacket(packet,out);
|
WritePacket(packet,out,this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Packet PlayerCountPacket = CreatePlayerCountPacket(Server.ConnectedClients.size());
|
||||||
|
Server.OutGoingPacketQueue.add(PlayerCountPacket);
|
||||||
System.out.println("Connection Closing: " + Thread.currentThread() + "\n");
|
System.out.println("Connection Closing: " + Thread.currentThread() + "\n");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("Connection Closing: " + Thread.currentThread() + "\n");
|
System.out.println("Connection Closing: " + Thread.currentThread() + "\n");
|
||||||
|
|
@ -188,10 +203,7 @@ public class ServerConnectionThread implements Runnable{
|
||||||
|
|
||||||
case Packet.PACKET_CLIENT_INPUT:
|
case Packet.PACKET_CLIENT_INPUT:
|
||||||
if(!sender.OwnsActor(packet.TargetID)) return;
|
if(!sender.OwnsActor(packet.TargetID)) return;
|
||||||
|
//to be implemented later
|
||||||
// Later: decode input commands here instead of trusting full transforms.
|
|
||||||
// Example future data:
|
|
||||||
// forward/back/left/right/jump/yaw/pitch/sequenceNumber
|
|
||||||
break;
|
break;
|
||||||
case Packet.PACKET_UPDATE_MODEL_ID:
|
case Packet.PACKET_UPDATE_MODEL_ID:
|
||||||
if(!packet.TargetID.equals(ConnectedClients.get(packet.ClientID).OwnedActorID)) {
|
if(!packet.TargetID.equals(ConnectedClients.get(packet.ClientID).OwnedActorID)) {
|
||||||
|
|
@ -200,6 +212,11 @@ public class ServerConnectionThread implements Runnable{
|
||||||
Packet ReboundPacket = CreateUpdateModelIDPacket(packet.TargetID, Packet.DecodeAsString(packet.Data));
|
Packet ReboundPacket = CreateUpdateModelIDPacket(packet.TargetID, Packet.DecodeAsString(packet.Data));
|
||||||
Server.OutGoingPacketQueue.add(ReboundPacket);
|
Server.OutGoingPacketQueue.add(ReboundPacket);
|
||||||
break;
|
break;
|
||||||
|
case Packet.PACKET_SEND_PLAYER_COUNT:
|
||||||
|
if(!packet.TargetID.equals("NULL")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -207,7 +224,23 @@ public class ServerConnectionThread implements Runnable{
|
||||||
return OwnedActorID != null && OwnedActorID.equals(actorID);
|
return OwnedActorID != null && OwnedActorID.equals(actorID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Packet CreatePlayerUUIDPacket(UUID clientID, ServerConnectionThread sender){
|
||||||
|
System.out.println("Creating UUID packet for client: " + clientID);
|
||||||
|
Packet packet = new Packet(Packet.PACKET_ASSIGN_UUID);
|
||||||
|
packet.SetTargetType((byte) 0);
|
||||||
|
packet.SetData(clientID.toString().getBytes(StandardCharsets.UTF_8));
|
||||||
|
packet.SetID("New Client");
|
||||||
|
packet.ClientID = sender.ClientID;
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Packet CreatePlayerCountPacket(int PlayerCount){
|
||||||
|
Packet packet = new Packet(Packet.PACKET_SEND_PLAYER_COUNT);
|
||||||
|
packet.SetTargetType((byte) 0);
|
||||||
|
packet.SetData(Integer.toString(PlayerCount).getBytes(StandardCharsets.UTF_8));
|
||||||
|
packet.SetID("New Client");
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
|
|
||||||
public static Packet CreateActorPacket(Actor actor){
|
public static Packet CreateActorPacket(Actor actor){
|
||||||
Packet newOutgoingPacket = new Packet(Packet.PACKET_CREATE_ACTOR);
|
Packet newOutgoingPacket = new Packet(Packet.PACKET_CREATE_ACTOR);
|
||||||
|
|
@ -337,8 +370,12 @@ public class ServerConnectionThread implements Runnable{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void WritePacket(Packet outPacket, DataOutputStream Outgoing) throws IOException {
|
public static void WritePacket(Packet outPacket, DataOutputStream Outgoing, ServerConnectionThread client) throws IOException {
|
||||||
if(Outgoing == null ) return;
|
if(Outgoing == null || outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID && outPacket.ClientID != client.ClientID){
|
||||||
|
System.out.println(outPacket.PacketTypeByte == Packet.PACKET_ASSIGN_UUID ? "Packet Client ID: " + outPacket.ClientID + " != " + client.ClientID :
|
||||||
|
"Packet not sent to client: " + outPacket.ClientID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
byte[] DataToSend = Packet.GetOutgoingData(outPacket);
|
byte[] DataToSend = Packet.GetOutgoingData(outPacket);
|
||||||
Outgoing.write(DataToSend);
|
Outgoing.write(DataToSend);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue