Character movements between chunks

pull/19/head
Valentin Stark 3 years ago
parent 0218e70577
commit 04018cea06
  1. 2
      .godot/editor/Instance.tscn-folding-9d991e3bcaa18250a5137d16090bc9f4.cfg
  2. 6
      .godot/editor/camera.tscn-editstate-171b6540a4c3cdae5b0905e52ed5116f.cfg
  3. 2
      .godot/editor/editor_layout.cfg
  4. 46
      .godot/editor/filesystem_cache8
  5. 12
      .godot/editor/filesystem_update4
  6. 4
      .godot/editor/project_metadata.cfg
  7. 52
      .godot/editor/script_editor_cache.cfg
  8. BIN
      .godot/uid_cache.bin
  9. 4
      scenes/camera.tscn
  10. 5
      scripts/Board.gd
  11. 35
      scripts/Chunk.gd
  12. 15
      scripts/Entity.gd
  13. 1
      scripts/Ground.gd
  14. 27
      scripts/Instance3D.gd
  15. 20
      scripts/World.gd

@ -1,5 +1,5 @@
[folding] [folding]
node_unfolds=[NodePath("."), PackedStringArray("Transform"), NodePath("Pivot"), PackedStringArray("Transform"), NodePath("Pivot/fox"), PackedStringArray("Visibility", "Transform"), NodePath("CollisionShape3D"), PackedStringArray("shape", "Transform"), NodePath("RayCast3D"), PackedStringArray("Transform")] node_unfolds=[NodePath("."), PackedStringArray("Transform"), NodePath("Pivot"), PackedStringArray("Transform"), NodePath("Pivot/fox"), PackedStringArray("Visibility", "Transform"), NodePath("CollisionShape3D"), PackedStringArray("shape", "Transform"), NodePath("RayCast3D"), PackedStringArray("Transform")]
resource_unfolds=["res://scenes/Instance.tscn::ArrayMesh_e2578", PackedStringArray(), "res://scenes/Instance.tscn::Skin_ue8ij", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_atpyt", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_6pt58", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_dsilq", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_hauf1", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_46uut", PackedStringArray(), "res://scenes/Instance.tscn::ArrayMesh_cxm68", PackedStringArray(), "res://scenes/Instance.tscn::CapsuleShape3D_ed37x", PackedStringArray(), "res://scenes/Instance.tscn::AnimationNodeStateMachine_wao7v", PackedStringArray(), "res://scenes/Instance.tscn::AnimationNodeStateMachinePlayback_r217c", PackedStringArray()] resource_unfolds=[]
nodes_folded=[NodePath("Pivot/fox")] nodes_folded=[NodePath("Pivot/fox")]

@ -97,7 +97,7 @@ Anim={
"auto_orthogonal_enabled": true, "auto_orthogonal_enabled": true,
"cinematic_preview": false, "cinematic_preview": false,
"display_mode": 20, "display_mode": 20,
"distance": 10.0727, "distance": 7.40374,
"doppler": false, "doppler": false,
"frame_time": false, "frame_time": false,
"gizmos": true, "gizmos": true,
@ -108,8 +108,8 @@ Anim={
"use_environment": false, "use_environment": false,
"use_orthogonal": false, "use_orthogonal": false,
"view_type": 0, "view_type": 0,
"x_rotation": 0.21202, "x_rotation": 0.0418504,
"y_rotation": -7.89147 "y_rotation": -8.20563
}, { }, {
"auto_orthogonal": false, "auto_orthogonal": false,
"auto_orthogonal_enabled": true, "auto_orthogonal_enabled": true,

@ -16,7 +16,7 @@ dock_5="Inspector,Node,History"
[EditorNode] [EditorNode]
open_scenes=["res://scenes/WorldGeneration.tscn", "res://scenes/3DWorld.tscn", "res://assets/blocs/blocs.tscn", "res://scenes/HUD.tscn", "res://scenes/Instance.tscn", "res://scenes/camera.tscn", "res://scenes/Map.tscn", "res://scenes/Game.tscn"] open_scenes=["res://scenes/WorldGeneration.tscn", "res://scenes/camera.tscn"]
[ScriptEditor] [ScriptEditor]

@ -1,16 +1,16 @@
2a60927148abd1d33b818b535e306557 2a60927148abd1d33b818b535e306557
::res://::1680362959 ::res://::1680452417
export_presets.cfg::TextFile::-1::1680357289::0::1::::<><>:: export_presets.cfg::TextFile::-1::1680357289::0::1::::<><>::
icon.png::CompressedTexture2D::4672001524465425285::1676578483::1676582905::1::::<><>:: icon.png::CompressedTexture2D::4672001524465425285::1676578483::1676582905::1::::<><>::
README.md::TextFile::-1::1676578483::0::1::::<><>:: README.md::TextFile::-1::1676578483::0::1::::<><>::
test.tscn::PackedScene::2574507083474873372::1680357289::0::1::::<><>::res://scripts/Camera3D.gd test.tscn::PackedScene::2574507083474873372::1680357289::0::1::::<><>::res://scripts/Camera3D.gd
::res://assets/::1680362965 ::res://assets/::1680376641
animestyled_hdr.hdr::CompressedTexture2D::7983615197667896801::1680357289::1680357289::1::::<><>:: animestyled_hdr.hdr::CompressedTexture2D::7983615197667896801::1680357289::1680357289::1::::<><>::
environment.tres::Environment::8600195688495287911::1680362965::0::1::::<><>::uid://dl0k8gegahjf2 environment.tres::Environment::8600195688495287911::1680362965::0::1::::<><>::uid://dl0k8gegahjf2
sky.exr::CompressedTexture2D::3639266560030997135::1680357289::1680357289::1::::<><>:: sky.exr::CompressedTexture2D::3639266560030997135::1680357289::1680357289::1::::<><>::
water.gdshader::Shader::-1::1677174532::0::1::::<><>:: water.gdshader::Shader::-1::1680370267::0::1::::<><>::
water.material::ShaderMaterial::9221375527372224942::1680362965::0::1::::<><>::res://assets/water.gdshader water.material::ShaderMaterial::9221375527372224942::1680376641::0::1::::<><>::res://assets/water.gdshader
::res://assets/blocs/::1680362965 ::res://assets/blocs/::1680365982
0_sides.glb::PackedScene::7036506600244808940::1677174532::1677174532::1::::<><>:: 0_sides.glb::PackedScene::7036506600244808940::1677174532::1677174532::1::::<><>::
0_sides_grass.png::CompressedTexture2D::4551055068461159203::1677174532::1677174532::1::::<><>:: 0_sides_grass.png::CompressedTexture2D::4551055068461159203::1677174532::1677174532::1::::<><>::
1_side.glb::PackedScene::5601417408597394875::1677174532::1677617210::1::::<><>:: 1_side.glb::PackedScene::5601417408597394875::1677174532::1677617210::1::::<><>::
@ -24,7 +24,7 @@ water.material::ShaderMaterial::9221375527372224942::1680362965::0::1::::<><>::r
4_sides.glb::PackedScene::139420628202576697::1677174532::1677174532::1::::<><>:: 4_sides.glb::PackedScene::139420628202576697::1677174532::1677174532::1::::<><>::
4_sides_grass.png::CompressedTexture2D::7961782411803042998::1677174532::1677174532::1::::<><>:: 4_sides_grass.png::CompressedTexture2D::7961782411803042998::1677174532::1677174532::1::::<><>::
blocs.meshlib::MeshLibrary::3161916306234183153::1677617602::0::1::::<><>::uid://b53thhe2sa6x0<>uid://cfr1s2lqng8eo<>uid://c0xxcgdm7s2ak<>uid://bffdt5if5pnda<>uid://kc4nqve8lx14<>uid://dlo0nmochxy4u blocs.meshlib::MeshLibrary::3161916306234183153::1677617602::0::1::::<><>::uid://b53thhe2sa6x0<>uid://cfr1s2lqng8eo<>uid://c0xxcgdm7s2ak<>uid://bffdt5if5pnda<>uid://kc4nqve8lx14<>uid://dlo0nmochxy4u
blocs.tscn::PackedScene::3779811605783367088::1680362965::0::1::::<><>::uid://b53thhe2sa6x0<>uid://cfr1s2lqng8eo<>uid://c0xxcgdm7s2ak<>uid://bffdt5if5pnda<>uid://kc4nqve8lx14<>uid://dlo0nmochxy4u blocs.tscn::PackedScene::3779811605783367088::1680365982::0::1::::<><>::uid://b53thhe2sa6x0<>uid://cfr1s2lqng8eo<>uid://c0xxcgdm7s2ak<>uid://bffdt5if5pnda<>uid://kc4nqve8lx14<>uid://dlo0nmochxy4u
::res://assets/entities/::1680357275 ::res://assets/entities/::1680357275
character.tscn::PackedScene::7228591986680468162::1679670402::0::1::::<><>::uid://cnra1i2164n8e<>uid://bluw1mspkoy71<>uid://dttdl45idwmdq<>uid://bnm2cr6xrmyne<>uid://q1bmi2lut4w5 character.tscn::PackedScene::7228591986680468162::1679670402::0::1::::<><>::uid://cnra1i2164n8e<>uid://bluw1mspkoy71<>uid://dttdl45idwmdq<>uid://bnm2cr6xrmyne<>uid://q1bmi2lut4w5
fox.glb::PackedScene::7089061536691691956::1624458238::1679435438::1::::<><>:: fox.glb::PackedScene::7089061536691691956::1624458238::1679435438::1::::<><>::
@ -40,30 +40,32 @@ untitled_Diffuse.png::CompressedTexture2D::8759823716231481420::1679673439::1679
untitled_Normal.png::CompressedTexture2D::5131651999745619224::1679673438::1679673440::1::::<><>:: untitled_Normal.png::CompressedTexture2D::5131651999745619224::1679673438::1679673440::1::::<><>::
untitled_sword_diffuse.png::CompressedTexture2D::2430240386759295821::1679673439::1679673440::1::::<><>:: untitled_sword_diffuse.png::CompressedTexture2D::2430240386759295821::1679673439::1679673440::1::::<><>::
untitled_sword_metal.png::CompressedTexture2D::4375004727585147220::1679673440::1679673440::1::::<><>:: untitled_sword_metal.png::CompressedTexture2D::4375004727585147220::1679673440::1679673440::1::::<><>::
::res://assets/ui/::1680363309 ::res://assets/ui/::1680363317
bloc_select.png::CompressedTexture2D::1141775147858261351::1677618805::1677619095::1::::<><>:: bloc_select.png::CompressedTexture2D::1141775147858261351::1677618805::1677619095::1::::<><>::
cursor.png::CompressedTexture2D::1407698875963358091::1664126270::1680363317::1::::<><>:: cursor.png::CompressedTexture2D::1407698875963358091::1664126270::1680363317::1::::<><>::
::res://scenes/::1680362965 ::res://scenes/::1680384607
3DWorld.gdshader::Shader::-1::1680357289::0::1::::<><>:: 3DWorld.gdshader::Shader::-1::1680357289::0::1::::<><>::
3DWorld.tscn::PackedScene::3599411568061770725::1680362965::0::1::::<><>::res://scripts/Ground.gd<>res://scripts/Board.gd<>uid://dur874iy77jjr<>uid://qjc4ttmkxbch<>uid://dd7byfyvsblbw 3DWorld.tscn::PackedScene::3599411568061770725::1680365982::0::1::::<><>::res://scripts/Ground.gd<>res://scripts/Board.gd<>uid://dur874iy77jjr<>uid://qjc4ttmkxbch<>uid://dd7byfyvsblbw
3DWorld.VoxelGI_data.res::VoxelGIData::7277764935364316181::1680357289::0::1::::<><>:: 3DWorld.VoxelGI_data.res::VoxelGIData::7277764935364316181::1680357289::0::1::::<><>::
camera.tscn::PackedScene::7435992546840103852::1680362965::0::1::::<><>::res://scripts/Camera3D.gd camera.tscn::PackedScene::7435992546840103852::1680384607::0::1::::<><>::res://scripts/Camera3D.gd
fog.gdshader::Shader::-1::1680357289::0::1::::<><>:: fog.gdshader::Shader::-1::1680357289::0::1::::<><>::
Game.tscn::PackedScene::9075056520838281688::1677174532::0::1::::<><>::uid://brjt1u0dgbmi4<>uid://d1sd7pxywgunu Game.tscn::PackedScene::9075056520838281688::1680365982::0::1::::<><>::uid://brjt1u0dgbmi4<>uid://d1sd7pxywgunu
HUD.tscn::PackedScene::9021570906125339886::1680362965::0::1::::<><>::res://scripts/Map.gd HUD.tscn::PackedScene::9021570906125339886::1680365982::0::1::::<><>::uid://dla77ra2m245t
Instance.tscn::PackedScene::4220804716574195494::1680362965::0::1::::<><>::res://scripts/Instance3D.gd<>uid://dw2latnr2vbxc<>uid://cfd2s833ldeuy<>uid://bavhx67iarml6<>uid://b3ljxodmxmuhg<>uid://c831hydrcv4i6 Instance.tscn::PackedScene::4220804716574195494::1680365982::0::1::::<><>::res://scripts/Instance3D.gd<>uid://dw2latnr2vbxc<>uid://cfd2s833ldeuy<>uid://bavhx67iarml6<>uid://b3ljxodmxmuhg<>uid://c831hydrcv4i6
WorldGeneration.tscn::PackedScene::1108513713840477990::1680362965::0::1::::<><>::res://scripts/WorldGeneration.gd Map.tscn::PackedScene::7933340314411983611::1680365982::0::1::::<><>::res://scripts/Map.gd<>uid://ub5uhu2a7etv<>res://scripts/Map_Cursor.gd
WorldGeneration.tscn::PackedScene::1108513713840477990::1680384593::0::1::::<><>::res://scripts/WorldGeneration.gd
::res://scenes/MultiColorFog/::1680357289 ::res://scenes/MultiColorFog/::1680357289
MultiColorFogMaterial.tres::ShaderMaterial::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFog.shader MultiColorFogMaterial.tres::ShaderMaterial::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFog.shader
MultiColorFogOverlay.tscn::PackedScene::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFogMaterial.tres MultiColorFogOverlay.tscn::PackedScene::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFogMaterial.tres
::res://scripts/::1680358689 ::res://scripts/::1680384607
Board.gd::GDScript::-1::1680357658::0::1::::<>Node3D<>:: Board.gd::GDScript::-1::1680373251::0::1::::<>Node3D<>::
Camera3D.gd::GDScript::-1::1680358689::0::1::::<>Camera3D<>:: Camera3D.gd::GDScript::-1::1680363887::0::1::::<>Camera3D<>::
Chunk.gd::GDScript::-1::1680357289::0::1::::Chunk<>GridMap<>:: Chunk.gd::GDScript::-1::1680376608::0::1::::Chunk<>GridMap<>::
Entity.gd::GDScript::-1::1680357289::0::1::::Entity<>Node<>:: Entity.gd::GDScript::-1::1680384607::0::1::::Entity<>Node<>::
Global.gd::GDScript::-1::1677174532::0::1::::<>Node<>:: Global.gd::GDScript::-1::1677174532::0::1::::<>Node<>::
Ground.gd::GDScript::-1::1680357645::0::1::::<>Node3D<>:: Ground.gd::GDScript::-1::1680372500::0::1::::<>Node3D<>::
Instance3D.gd::GDScript::-1::1680357289::0::1::::<>CharacterBody3D<>:: Instance3D.gd::GDScript::-1::1680384004::0::1::::<>CharacterBody3D<>::
Map.gd::GDScript::-1::1678219623::0::1::::<>TextureRect<>:: Map.gd::GDScript::-1::1678219623::0::1::::<>TextureRect<>::
World.gd::GDScript::-1::1680357289::0::1::::World<>Node<>:: Map_Cursor.gd::GDScript::-1::1680365687::0::1::::<>TextureRect<>::
World.gd::GDScript::-1::1680372338::0::1::::World<>Node<>::
WorldGeneration.gd::GDScript::-1::1680357289::0::1::::<>Control<>:: WorldGeneration.gd::GDScript::-1::1680357289::0::1::::<>Control<>::

@ -1,14 +1,6 @@
res://scenes/WorldGeneration.tscn res://scenes/WorldGeneration.tscn
res://assets/water.material res://assets/water.material
res://assets/environment.tres
res://scenes/3DWorld.tscn
res://assets/blocs/blocs.tscn
res://scenes/HUD.tscn
res://scenes/Instance.tscn
res://scenes/camera.tscn res://scenes/camera.tscn
res://scripts/Map_Cursor.gd res://scripts/Entity.gd
res://scenes/Map.tscn
res://scenes/Game.tscn
res://scripts/World.gd res://scripts/World.gd
res://scripts/Camera3D.gd res://scripts/Instance3D.gd
res://assets/water.gdshader

@ -11,8 +11,8 @@ run_reload_scripts=true
[recent_files] [recent_files]
scenes=["res://scenes/Game.tscn", "res://scenes/Map.tscn", "res://scenes/camera.tscn", "res://scenes/Instance.tscn", "res://scenes/HUD.tscn", "res://assets/blocs/blocs.tscn", "res://scenes/3DWorld.tscn", "res://scenes/WorldGeneration.tscn", "res://test.tscn", "res://assets/entities/fox.tscn"] scenes=["res://scenes/camera.tscn", "res://scenes/WorldGeneration.tscn", "res://scenes/Game.tscn", "res://scenes/Map.tscn", "res://scenes/Instance.tscn", "res://scenes/HUD.tscn", "res://assets/blocs/blocs.tscn", "res://scenes/3DWorld.tscn", "res://test.tscn", "res://assets/entities/fox.tscn"]
scripts=["res://scripts/Map_Cursor.gd", "res://scripts/Map.gd", "Vector2i", "res://scripts/Camera3D.gd", "res://scripts/Entity.gd", "res://scripts/Chunk.gd", "res://scripts/Instance3D.gd", "res://scripts/WorldGeneration.gd", "res://scripts/World.gd", "res://scripts/Board.gd"] scripts=["Vector2i", "res://scripts/Map_Cursor.gd", "res://scripts/Map.gd", "res://scripts/Camera3D.gd", "res://scripts/Entity.gd", "res://scripts/Chunk.gd", "res://scripts/Instance3D.gd", "res://scripts/WorldGeneration.gd", "res://scripts/World.gd", "res://scripts/Board.gd"]
[color_picker] [color_picker]

@ -3,11 +3,11 @@
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 24, "column": 0,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 19, "row": 51,
"scroll_position": 9.0, "scroll_position": 33.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -17,11 +17,11 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 0, "column": 16,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 16, "row": 119,
"scroll_position": 60.0, "scroll_position": 94.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -31,11 +31,11 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 8, "column": 0,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 81, "row": 63,
"scroll_position": 51.0, "scroll_position": 112.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -87,16 +87,12 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 1, "column": 0,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 7, "row": 18,
"scroll_position": 0.0, "scroll_position": 0.0,
"selection": true, "selection": false,
"selection_from_column": 1,
"selection_from_line": 7,
"selection_to_column": 55,
"selection_to_line": 10,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -105,11 +101,11 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 28, "column": 103,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 8, "row": 26,
"scroll_position": 8.0, "scroll_position": 23.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -119,12 +115,16 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 28, "column": 44,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 103, "row": 141,
"scroll_position": 84.0, "scroll_position": 0.0,
"selection": false, "selection": true,
"selection_from_column": 29,
"selection_from_line": 141,
"selection_to_column": 44,
"selection_to_line": 141,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }
@ -133,11 +133,11 @@ state={
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 47, "column": 15,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 9, "row": 29,
"scroll_position": 0.0, "scroll_position": 4.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }

Binary file not shown.

@ -7,6 +7,6 @@ transform = Transform3D(1, 0, 0, 0, 0.863519, 0.504317, 0, -0.504317, 0.863519,
script = ExtResource("1_a8nwa") script = ExtResource("1_a8nwa")
[node name="RayCast3D" type="RayCast3D" parent="."] [node name="RayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 25, 0)
target_position = Vector3(0, -20, 0) target_position = Vector3(0, -50, 0)
collision_mask = 128 collision_mask = 128

@ -25,11 +25,6 @@ func _process(delta):
else: else:
selection = reset_highlight() selection = reset_highlight()
var entity = Global.world.add_entity(Vector2i(highlight.grid_position.x, highlight.grid_position.y)) var entity = Global.world.add_entity(Vector2i(highlight.grid_position.x, highlight.grid_position.y))
var entity_instance = Entity3D.instantiate()
entity_instance.id = entity.id
entity_instance.position = highlight.data.position
entity_instance.connect_to_world(entity_instance.id)
add_child(entity_instance)
if Input.is_action_just_pressed("main_command"): if Input.is_action_just_pressed("main_command"):
if selection.type == 1: if selection.type == 1:
var path = Global.world.entities[selection.data.id].path_create(Global.world.get_real_coordinates(Vector2i(highlight.data.position.x, highlight.data.position.z))) var path = Global.world.entities[selection.data.id].path_create(Global.world.get_real_coordinates(Vector2i(highlight.data.position.x, highlight.data.position.z)))

@ -1,6 +1,8 @@
extends GridMap extends GridMap
class_name Chunk class_name Chunk
const Entity3D = preload("res://scenes/Instance.tscn")
var x = 0 var x = 0
var z = 0 var z = 0
var size = 0 var size = 0
@ -23,6 +25,8 @@ func _init(x: int, z: int, size: int):
create_chunk() create_chunk()
create_water() create_water()
Global.world.new_entity.connect(_on_new_entity)
func create_chunk(): func create_chunk():
for mx in size: for mx in size:
@ -107,3 +111,34 @@ func create_water():
static_body.add_child(collision_shape) static_body.add_child(collision_shape)
static_body.translate(Vector3(size/2, 0.5, size/2)) static_body.translate(Vector3(size/2, 0.5, size/2))
add_child(static_body) add_child(static_body)
func is_inside_chunk(position: Vector2i) :
var min_x = x * size
var max_x = (x + 1) * size - 1
var min_y = z * size
var max_y = (z + 1) * size - 1
if position.x >= min_x and position.x <= max_x and position.y >= min_y and position.y <= max_y:
return true
return false
func get_chunk_position(position: Vector2i):
var min_x = x * size
var max_x = (x + 1) * size - 1
var min_y = z * size
var max_y = (z + 1) * size - 1
var chunk_position = Vector2i(position.x - min_x, position.y - min_y)
if chunk_position.x > max_x or chunk_position.y > max_y:
return null
return chunk_position
func _on_new_entity(entity):
if is_inside_chunk(entity.position):
var chunk_position = get_chunk_position(entity.position)
var entity_position = Vector3(chunk_position.x, entity.get_height(), chunk_position.y)
var entity_instance = Entity3D.instantiate()
entity_instance.id = entity.id
entity_instance.position = entity_position
entity_instance.connect_to_world(entity_instance.id)
add_child(entity_instance)

@ -39,7 +39,6 @@ func get_data():
func move(new_position: Vector2i, speed: float): func move(new_position: Vector2i, speed: float):
emit_signal("moving", new_position, speed) emit_signal("moving", new_position, speed)
print(new_position)
Global.world.blocs[position.x][position.y].entity = -1 Global.world.blocs[position.x][position.y].entity = -1
self.position = new_position self.position = new_position
position = new_position position = new_position
@ -56,7 +55,12 @@ func move(new_position: Vector2i, speed: float):
emit_signal("next_move") emit_signal("next_move")
func heuristic(a: Vector2i, b: Vector2i) -> float: func heuristic(a: Vector2i, b: Vector2i) -> float:
return abs(a.x - b.x) + abs(a.y - b.y) var dx = abs(a.x - b.x)
var dy = abs(a.y - b.y)
var xx = min(dx, Global.world.width - dx)
var yy = min(dy, Global.world.width - dy)
return xx + yy
func path_create(goal: Vector2i): func path_create(goal: Vector2i):
if goal == position: if goal == position:
@ -105,7 +109,9 @@ func path_create(goal: Vector2i):
func path_go_to(index): func path_go_to(index):
var next = path[index] var next = path[index]
var distance = sqrt(pow(next.x - position.x, 2) + pow(next.y - position.y, 2))
var vec_distance = Global.world.vec_distance(position, next)
var distance = sqrt(pow(vec_distance.x, 2) + pow(vec_distance.y, 2))
var speed = global_speed / distance var speed = global_speed / distance
move(next, speed) move(next, speed)
@ -126,3 +132,6 @@ func _path_continue():
func set_state(new_state): func set_state(new_state):
state = new_state state = new_state
emit_signal("changed_state", state) emit_signal("changed_state", state)
func get_height():
return Global.world.get_height(position)

@ -27,6 +27,7 @@ func init_chunks():
chunks[x].append([]) chunks[x].append([])
chunks[x][y] = Chunk.new(x, y, Global.world.chunk_size) chunks[x][y] = Chunk.new(x, y, Global.world.chunk_size)
chunks[x][y].set_name("Chunk") chunks[x][y].set_name("Chunk")
chunks[x][y]
# print(chunks) # print(chunks)
# #
#func create_chunk(coord: Vector2i): #func create_chunk(coord: Vector2i):

@ -1,7 +1,8 @@
extends CharacterBody3D extends CharacterBody3D
var id = -1 var id = -1
var instance_position: Vector2i
var world_entity
@onready var ray = $RayCast3D @onready var ray = $RayCast3D
func _process(delta): func _process(delta):
@ -11,21 +12,25 @@ func _process(delta):
tween.tween_property(self, "position:y", height, 0.1) tween.tween_property(self, "position:y", height, 0.1)
func connect_to_world(id): func connect_to_world(id):
var world_entity = Global.world.entities[id] world_entity = Global.world.entities[id]
world_entity.moving.connect(_on_entity_moving) world_entity.moving.connect(_on_entity_moving)
world_entity.changed_state.connect(_on_changed_state) world_entity.changed_state.connect(_on_changed_state)
instance_position = world_entity.position
func _on_entity_moving(new_position, speed): func _on_entity_moving(new_position, speed):
print(new_position) var x_tween = Engine.get_main_loop().create_tween()
var x_tween = get_tree().create_tween() var z_tween = Engine.get_main_loop().create_tween()
var z_tween = get_tree().create_tween() var rot_tween = Engine.get_main_loop().create_tween()
var rot_tween = get_tree().create_tween()
var position2d = Vector2i(round(position.x), round(position.z))
var distance = Global.world.vec_distance(world_entity.position, new_position)
var new_pawn_position = position2d + distance
x_tween.tween_property(self, "position:x", new_position.x, 1.0/speed) x_tween.tween_property(self, "position:x", new_pawn_position.x, 1.0/speed)
z_tween.tween_property(self, "position:z", new_position.y, 1.0/speed) z_tween.tween_property(self, "position:z", new_pawn_position.y, 1.0/speed)
var vector = Vector2(new_position.y, new_position.x) - Vector2(self.position.z, self.position.x) var vector = Vector2(new_pawn_position.y, new_pawn_position.x) - Vector2(self.position.z, self.position.x)
var angle = vector.angle() var angle = vector.angle()
var new_rotation = lerp_angle(position.y, angle, 1) var new_rotation = lerp_angle(position.y, angle, 1)
rot_tween.tween_property(self, "rotation:y", new_rotation, 0.1) rot_tween.tween_property(self, "rotation:y", new_rotation, 0.1)
@ -34,4 +39,4 @@ func _on_changed_state(state):
if state == 0: if state == 0:
$AnimationTree["parameters/playback"].travel("Idle") $AnimationTree["parameters/playback"].travel("Idle")
if state == 1: if state == 1:
$AnimationTree["parameters/playback"].travel("Walk") $AnimationTree["parameters/playback"].travel("Walk")

@ -17,6 +17,8 @@ var chunk_number = 6
var player_position: Vector2i var player_position: Vector2i
signal new_entity
func get_neighbours_8_at_same_height(point: Vector2i): func get_neighbours_8_at_same_height(point: Vector2i):
var neighbours = 0 var neighbours = 0
var current_bloc = get_height(Vector2i(point.x, point.y)) var current_bloc = get_height(Vector2i(point.x, point.y))
@ -85,10 +87,13 @@ func get_height(point: Vector2i):
func add_entity(position: Vector2i): func add_entity(position: Vector2i):
entities.append(Entity.new(entities.size(), position)) entities.append(Entity.new(entities.size(), position))
blocs[position.x][position.y]["entity"] = entities.size() - 1 blocs[position.x][position.y]["entity"] = entities.size() - 1
emit_signal("new_entity", entities[entities.size() - 1])
return entities[entities.size() - 1] return entities[entities.size() - 1]
func cost(point1: Vector2i, point2: Vector2i): func cost(point1: Vector2i, point2: Vector2i):
var cost = 1 var cost = 1
point1 = get_real_coordinates(point1)
point2 = get_real_coordinates(point2)
if ( if (
(point1.x == point2.x + 1 and point1.y == point2.y + 1) or (point1.x == point2.x + 1 and point1.y == point2.y + 1) or
(point1.x == point2.x + 1 and point1.y == point2.y - 1) or (point1.x == point2.x + 1 and point1.y == point2.y - 1) or
@ -98,3 +103,18 @@ func cost(point1: Vector2i, point2: Vector2i):
cost = 1.1 cost = 1.1
return cost return cost
func vec_distance(start: Vector2, end: Vector2):
var dx = end.x - start.x
var dy = end.y - start.y
if dx > Global.world.width / 2:
dx -= Global.world.width
elif dx < -Global.world.width / 2:
dx += Global.world.width
if dy > Global.world.height / 2:
dy -= Global.world.height
elif dy < 0 and dy < -Global.world.height / 2:
dy += Global.world.height
return Vector2i(dx, dy)

Loading…
Cancel
Save