diff --git a/.godot/editor/Instance.tscn-folding-9d991e3bcaa18250a5137d16090bc9f4.cfg b/.godot/editor/Instance.tscn-folding-9d991e3bcaa18250a5137d16090bc9f4.cfg index e2fe02b..86b5e0a 100644 --- a/.godot/editor/Instance.tscn-folding-9d991e3bcaa18250a5137d16090bc9f4.cfg +++ b/.godot/editor/Instance.tscn-folding-9d991e3bcaa18250a5137d16090bc9f4.cfg @@ -1,5 +1,5 @@ [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")] -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")] diff --git a/.godot/editor/camera.tscn-editstate-171b6540a4c3cdae5b0905e52ed5116f.cfg b/.godot/editor/camera.tscn-editstate-171b6540a4c3cdae5b0905e52ed5116f.cfg index 84a8863..28b5921 100644 --- a/.godot/editor/camera.tscn-editstate-171b6540a4c3cdae5b0905e52ed5116f.cfg +++ b/.godot/editor/camera.tscn-editstate-171b6540a4c3cdae5b0905e52ed5116f.cfg @@ -97,7 +97,7 @@ Anim={ "auto_orthogonal_enabled": true, "cinematic_preview": false, "display_mode": 20, -"distance": 10.0727, +"distance": 7.40374, "doppler": false, "frame_time": false, "gizmos": true, @@ -108,8 +108,8 @@ Anim={ "use_environment": false, "use_orthogonal": false, "view_type": 0, -"x_rotation": 0.21202, -"y_rotation": -7.89147 +"x_rotation": 0.0418504, +"y_rotation": -8.20563 }, { "auto_orthogonal": false, "auto_orthogonal_enabled": true, diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg index 19556da..91d364c 100644 --- a/.godot/editor/editor_layout.cfg +++ b/.godot/editor/editor_layout.cfg @@ -16,7 +16,7 @@ dock_5="Inspector,Node,History" [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] diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8 index 1bd7510..c19dc39 100644 --- a/.godot/editor/filesystem_cache8 +++ b/.godot/editor/filesystem_cache8 @@ -1,16 +1,16 @@ 2a60927148abd1d33b818b535e306557 -::res://::1680362959 +::res://::1680452417 export_presets.cfg::TextFile::-1::1680357289::0::1::::<><>:: icon.png::CompressedTexture2D::4672001524465425285::1676578483::1676582905::1::::<><>:: README.md::TextFile::-1::1676578483::0::1::::<><>:: 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::::<><>:: environment.tres::Environment::8600195688495287911::1680362965::0::1::::<><>::uid://dl0k8gegahjf2 sky.exr::CompressedTexture2D::3639266560030997135::1680357289::1680357289::1::::<><>:: -water.gdshader::Shader::-1::1677174532::0::1::::<><>:: -water.material::ShaderMaterial::9221375527372224942::1680362965::0::1::::<><>::res://assets/water.gdshader -::res://assets/blocs/::1680362965 +water.gdshader::Shader::-1::1680370267::0::1::::<><>:: +water.material::ShaderMaterial::9221375527372224942::1680376641::0::1::::<><>::res://assets/water.gdshader +::res://assets/blocs/::1680365982 0_sides.glb::PackedScene::7036506600244808940::1677174532::1677174532::1::::<><>:: 0_sides_grass.png::CompressedTexture2D::4551055068461159203::1677174532::1677174532::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_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.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 character.tscn::PackedScene::7228591986680468162::1679670402::0::1::::<><>::uid://cnra1i2164n8e<>uid://bluw1mspkoy71<>uid://dttdl45idwmdq<>uid://bnm2cr6xrmyne<>uid://q1bmi2lut4w5 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_sword_diffuse.png::CompressedTexture2D::2430240386759295821::1679673439::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::::<><>:: cursor.png::CompressedTexture2D::1407698875963358091::1664126270::1680363317::1::::<><>:: -::res://scenes/::1680362965 +::res://scenes/::1680384607 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::::<><>:: -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::::<><>:: -Game.tscn::PackedScene::9075056520838281688::1677174532::0::1::::<><>::uid://brjt1u0dgbmi4<>uid://d1sd7pxywgunu -HUD.tscn::PackedScene::9021570906125339886::1680362965::0::1::::<><>::res://scripts/Map.gd -Instance.tscn::PackedScene::4220804716574195494::1680362965::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 +Game.tscn::PackedScene::9075056520838281688::1680365982::0::1::::<><>::uid://brjt1u0dgbmi4<>uid://d1sd7pxywgunu +HUD.tscn::PackedScene::9021570906125339886::1680365982::0::1::::<><>::uid://dla77ra2m245t +Instance.tscn::PackedScene::4220804716574195494::1680365982::0::1::::<><>::res://scripts/Instance3D.gd<>uid://dw2latnr2vbxc<>uid://cfd2s833ldeuy<>uid://bavhx67iarml6<>uid://b3ljxodmxmuhg<>uid://c831hydrcv4i6 +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 MultiColorFogMaterial.tres::ShaderMaterial::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFog.shader MultiColorFogOverlay.tscn::PackedScene::-1::1680357289::0::1::::<><>::res://MultiColorFog/MultiColorFogMaterial.tres -::res://scripts/::1680358689 -Board.gd::GDScript::-1::1680357658::0::1::::<>Node3D<>:: -Camera3D.gd::GDScript::-1::1680358689::0::1::::<>Camera3D<>:: -Chunk.gd::GDScript::-1::1680357289::0::1::::Chunk<>GridMap<>:: -Entity.gd::GDScript::-1::1680357289::0::1::::Entity<>Node<>:: +::res://scripts/::1680384607 +Board.gd::GDScript::-1::1680373251::0::1::::<>Node3D<>:: +Camera3D.gd::GDScript::-1::1680363887::0::1::::<>Camera3D<>:: +Chunk.gd::GDScript::-1::1680376608::0::1::::Chunk<>GridMap<>:: +Entity.gd::GDScript::-1::1680384607::0::1::::Entity<>Node<>:: Global.gd::GDScript::-1::1677174532::0::1::::<>Node<>:: -Ground.gd::GDScript::-1::1680357645::0::1::::<>Node3D<>:: -Instance3D.gd::GDScript::-1::1680357289::0::1::::<>CharacterBody3D<>:: +Ground.gd::GDScript::-1::1680372500::0::1::::<>Node3D<>:: +Instance3D.gd::GDScript::-1::1680384004::0::1::::<>CharacterBody3D<>:: 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<>:: diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4 index c9a632c..dcda8fb 100644 --- a/.godot/editor/filesystem_update4 +++ b/.godot/editor/filesystem_update4 @@ -1,14 +1,6 @@ res://scenes/WorldGeneration.tscn 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://scripts/Map_Cursor.gd -res://scenes/Map.tscn -res://scenes/Game.tscn +res://scripts/Entity.gd res://scripts/World.gd -res://scripts/Camera3D.gd -res://assets/water.gdshader +res://scripts/Instance3D.gd diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg index fa42614..90dbee2 100644 --- a/.godot/editor/project_metadata.cfg +++ b/.godot/editor/project_metadata.cfg @@ -11,8 +11,8 @@ run_reload_scripts=true [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"] -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"] +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=["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] diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg index dddbda1..d90d3d2 100644 --- a/.godot/editor/script_editor_cache.cfg +++ b/.godot/editor/script_editor_cache.cfg @@ -3,11 +3,11 @@ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 24, +"column": 0, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 19, -"scroll_position": 9.0, +"row": 51, +"scroll_position": 33.0, "selection": false, "syntax_highlighter": "GDScript" } @@ -17,11 +17,11 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 0, +"column": 16, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 16, -"scroll_position": 60.0, +"row": 119, +"scroll_position": 94.0, "selection": false, "syntax_highlighter": "GDScript" } @@ -31,11 +31,11 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 8, +"column": 0, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 81, -"scroll_position": 51.0, +"row": 63, +"scroll_position": 112.0, "selection": false, "syntax_highlighter": "GDScript" } @@ -87,16 +87,12 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 1, +"column": 0, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 7, +"row": 18, "scroll_position": 0.0, -"selection": true, -"selection_from_column": 1, -"selection_from_line": 7, -"selection_to_column": 55, -"selection_to_line": 10, +"selection": false, "syntax_highlighter": "GDScript" } @@ -105,11 +101,11 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 28, +"column": 103, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 8, -"scroll_position": 8.0, +"row": 26, +"scroll_position": 23.0, "selection": false, "syntax_highlighter": "GDScript" } @@ -119,12 +115,16 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 28, +"column": 44, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 103, -"scroll_position": 84.0, -"selection": false, +"row": 141, +"scroll_position": 0.0, +"selection": true, +"selection_from_column": 29, +"selection_from_line": 141, +"selection_to_column": 44, +"selection_to_line": 141, "syntax_highlighter": "GDScript" } @@ -133,11 +133,11 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 47, +"column": 15, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 9, -"scroll_position": 0.0, +"row": 29, +"scroll_position": 4.0, "selection": false, "syntax_highlighter": "GDScript" } diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin index f3a908e..f98fa75 100644 Binary files a/.godot/uid_cache.bin and b/.godot/uid_cache.bin differ diff --git a/scenes/camera.tscn b/scenes/camera.tscn index 73b678e..e7787dd 100644 --- a/scenes/camera.tscn +++ b/scenes/camera.tscn @@ -7,6 +7,6 @@ transform = Transform3D(1, 0, 0, 0, 0.863519, 0.504317, 0, -0.504317, 0.863519, script = ExtResource("1_a8nwa") [node name="RayCast3D" type="RayCast3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) -target_position = Vector3(0, -20, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 25, 0) +target_position = Vector3(0, -50, 0) collision_mask = 128 diff --git a/scripts/Board.gd b/scripts/Board.gd index 99f8628..8f19b52 100644 --- a/scripts/Board.gd +++ b/scripts/Board.gd @@ -25,11 +25,6 @@ func _process(delta): else: selection = reset_highlight() 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 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))) diff --git a/scripts/Chunk.gd b/scripts/Chunk.gd index e7bc028..de00798 100644 --- a/scripts/Chunk.gd +++ b/scripts/Chunk.gd @@ -1,6 +1,8 @@ extends GridMap class_name Chunk +const Entity3D = preload("res://scenes/Instance.tscn") + var x = 0 var z = 0 var size = 0 @@ -23,6 +25,8 @@ func _init(x: int, z: int, size: int): create_chunk() create_water() + Global.world.new_entity.connect(_on_new_entity) + func create_chunk(): for mx in size: @@ -107,3 +111,34 @@ func create_water(): static_body.add_child(collision_shape) static_body.translate(Vector3(size/2, 0.5, size/2)) 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) diff --git a/scripts/Entity.gd b/scripts/Entity.gd index a36da3a..f4f206d 100644 --- a/scripts/Entity.gd +++ b/scripts/Entity.gd @@ -39,7 +39,6 @@ func get_data(): func move(new_position: Vector2i, speed: float): emit_signal("moving", new_position, speed) - print(new_position) Global.world.blocs[position.x][position.y].entity = -1 self.position = new_position position = new_position @@ -56,7 +55,12 @@ func move(new_position: Vector2i, speed: float): emit_signal("next_move") 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): if goal == position: @@ -105,7 +109,9 @@ func path_create(goal: Vector2i): func path_go_to(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 move(next, speed) @@ -126,3 +132,6 @@ func _path_continue(): func set_state(new_state): state = new_state emit_signal("changed_state", state) + +func get_height(): + return Global.world.get_height(position) diff --git a/scripts/Ground.gd b/scripts/Ground.gd index d53bc1a..0764147 100644 --- a/scripts/Ground.gd +++ b/scripts/Ground.gd @@ -27,6 +27,7 @@ func init_chunks(): chunks[x].append([]) chunks[x][y] = Chunk.new(x, y, Global.world.chunk_size) chunks[x][y].set_name("Chunk") + chunks[x][y] # print(chunks) # #func create_chunk(coord: Vector2i): diff --git a/scripts/Instance3D.gd b/scripts/Instance3D.gd index becae4f..d3a9a1ef 100644 --- a/scripts/Instance3D.gd +++ b/scripts/Instance3D.gd @@ -1,7 +1,8 @@ extends CharacterBody3D var id = -1 -var instance_position: Vector2i + +var world_entity @onready var ray = $RayCast3D func _process(delta): @@ -11,21 +12,25 @@ func _process(delta): tween.tween_property(self, "position:y", height, 0.1) 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.changed_state.connect(_on_changed_state) - instance_position = world_entity.position + func _on_entity_moving(new_position, speed): - print(new_position) - var x_tween = get_tree().create_tween() - var z_tween = get_tree().create_tween() - var rot_tween = get_tree().create_tween() + var x_tween = Engine.get_main_loop().create_tween() + var z_tween = Engine.get_main_loop().create_tween() + var rot_tween = Engine.get_main_loop().create_tween() - x_tween.tween_property(self, "position:x", new_position.x, 1.0/speed) - z_tween.tween_property(self, "position:z", new_position.y, 1.0/speed) + 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 - var vector = Vector2(new_position.y, new_position.x) - Vector2(self.position.z, self.position.x) + x_tween.tween_property(self, "position:x", new_pawn_position.x, 1.0/speed) + z_tween.tween_property(self, "position:z", new_pawn_position.y, 1.0/speed) + + var vector = Vector2(new_pawn_position.y, new_pawn_position.x) - Vector2(self.position.z, self.position.x) var angle = vector.angle() var new_rotation = lerp_angle(position.y, angle, 1) rot_tween.tween_property(self, "rotation:y", new_rotation, 0.1) @@ -34,4 +39,4 @@ func _on_changed_state(state): if state == 0: $AnimationTree["parameters/playback"].travel("Idle") if state == 1: - $AnimationTree["parameters/playback"].travel("Walk") + $AnimationTree["parameters/playback"].travel("Walk") diff --git a/scripts/World.gd b/scripts/World.gd index 6b6bffa..c58eb5b 100644 --- a/scripts/World.gd +++ b/scripts/World.gd @@ -17,6 +17,8 @@ var chunk_number = 6 var player_position: Vector2i +signal new_entity + func get_neighbours_8_at_same_height(point: Vector2i): var neighbours = 0 var current_bloc = get_height(Vector2i(point.x, point.y)) @@ -85,10 +87,13 @@ func get_height(point: Vector2i): func add_entity(position: Vector2i): entities.append(Entity.new(entities.size(), position)) blocs[position.x][position.y]["entity"] = entities.size() - 1 + emit_signal("new_entity", entities[entities.size() - 1]) return entities[entities.size() - 1] func cost(point1: Vector2i, point2: Vector2i): var cost = 1 + point1 = get_real_coordinates(point1) + point2 = get_real_coordinates(point2) 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 @@ -98,3 +103,18 @@ func cost(point1: Vector2i, point2: Vector2i): cost = 1.1 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)