Add example scene and player for enhanced_gridmap

Introduces a new example scene and player script for the enhanced_gridmap addon, including supporting resources and materials. Updates the mesh library, assets, and main scene to integrate new tile types and visual styles. Adjusts project settings for improved resolution and sets the new main scene as the entry point.
This commit is contained in:
2025-10-22 11:50:17 +08:00
parent f8521a78ff
commit 84413314ef
18 changed files with 264 additions and 82 deletions
+43
View File
@@ -0,0 +1,43 @@
[gd_scene load_steps=6 format=3 uid="uid://dpihcqibm8d4q"]
[ext_resource type="Script" uid="uid://dudbm0fqk82rm" path="res://addons/enhanced_gridmap/example/player.gd" id="1_ct1x4"]
[ext_resource type="MeshLibrary" uid="uid://kcv6ans86ug7" path="res://addons/enhanced_gridmap/meshlibrary/default.tres" id="2_buqgu"]
[ext_resource type="Script" uid="uid://bja8ixryvthu0" path="res://addons/enhanced_gridmap/enhanced_gridmap.gd" id="3_4dd4k"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_ct1x4"]
[sub_resource type="Environment" id="Environment_ct1x4"]
background_mode = 1
background_color = Color(1, 1, 1, 1)
[node name="Main" type="Node3D"]
script = ExtResource("1_ct1x4")
enhanced_gridmap_path = NodePath("EnhancedGridMap")
player_path = NodePath("Player")
[node name="EnhancedGridMap" type="GridMap" parent="."]
mesh_library = ExtResource("2_buqgu")
data = {
"cells": PackedInt32Array(0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 1, 6, 0, 1, 7, 0, 1, 8, 0, 1, 9, 0, 2, 0, 0, 2, 1, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0, 2, 5, 0, 2, 6, 0, 2, 7, 0, 2, 8, 0, 2, 9, 0, 3, 0, 0, 3, 1, 0, 3, 2, 0, 3, 3, 0, 3, 4, 0, 3, 5, 0, 3, 6, 0, 3, 7, 0, 3, 8, 0, 3, 9, 0, 4, 0, 0, 4, 1, 0, 4, 2, 0, 4, 3, 0, 4, 4, 0, 4, 5, 0, 4, 6, 0, 4, 7, 0, 4, 8, 0, 4, 9, 0, 5, 0, 0, 5, 1, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 5, 0, 5, 6, 0, 5, 7, 0, 5, 8, 0, 5, 9, 0, 6, 0, 0, 6, 1, 0, 6, 2, 0, 6, 3, 0, 6, 4, 0, 6, 5, 0, 6, 6, 0, 6, 7, 0, 6, 8, 0, 6, 9, 0, 7, 0, 0, 7, 1, 0, 7, 2, 0, 7, 3, 0, 7, 4, 0, 7, 5, 0, 7, 6, 0, 7, 7, 0, 7, 8, 0, 7, 9, 0, 8, 0, 0, 8, 1, 0, 8, 2, 0, 8, 3, 0, 8, 4, 0, 8, 5, 0, 8, 6, 0, 8, 7, 0, 8, 8, 0, 8, 9, 0, 9, 0, 0, 9, 1, 0, 9, 2, 0, 9, 3, 0, 9, 4, 0, 9, 5, 0, 9, 6, 0, 9, 7, 0, 9, 8, 0, 9, 9, 0)
}
script = ExtResource("3_4dd4k")
floors = 1
auto_generate = true
obstacle_items = Array[int]([])
metadata/_custom_type_script = "uid://bja8ixryvthu0"
[node name="Player" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1)
[node name="MeshInstance3D" type="MeshInstance3D" parent="Player"]
mesh = SubResource("CapsuleMesh_ct1x4")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(-1, -1.89462e-15, -8.74228e-08, -8.74228e-08, -5.96047e-08, 1, -7.10543e-15, 1, 5.96047e-08, 9.9742, 24.112, 10)
environment = SubResource("Environment_ct1x4")
projection = 1
size = 26.0
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 31, 0)
visible = false
+129
View File
@@ -0,0 +1,129 @@
extends Node3D
@export var enhanced_gridmap_path: NodePath
@export var player_path: NodePath
var enhanced_gridmap: EnhancedGridMap
var player: Node3D
var current_position: Vector2i
var is_player_moving: bool = false
# Customizable cell size and offset
@export var cell_size: Vector3 = Vector3(2, 2, 2)
@export var cell_offset: Vector3 = Vector3(0, 0, 0)
# Diagonal movement flag
@export var use_diagonal_movement: bool = false:
set(value):
use_diagonal_movement = value
if enhanced_gridmap:
enhanced_gridmap.set_diagonal_movement(value)
func _ready():
enhanced_gridmap = get_node(enhanced_gridmap_path)
player = get_node(player_path)
if not enhanced_gridmap or not player:
push_error("EnhancedGridMap or Player node not found. Please set the correct paths in the inspector.")
return
# Ensure the A* graph is initialized
enhanced_gridmap.initialize_astar()
# Sync diagonal movement setting with the plugin
enhanced_gridmap.set_diagonal_movement(use_diagonal_movement)
# Position the player at a valid starting position
#current_position = find_valid_starting_position()
current_position = Vector2i(0,2)
update_player_position(current_position)
func find_valid_starting_position() -> Vector2i:
for x in range(enhanced_gridmap.columns):
for z in range(enhanced_gridmap.rows):
for item in enhanced_gridmap.non_walkable_items.size():
if enhanced_gridmap.get_cell_item(Vector3i(x, 0, z)) != enhanced_gridmap.non_walkable_items[item]:
return Vector2i(x, z)
return Vector2i(0, 0) # Fallback to (0,0) if no valid position found
func _unhandled_input(event):
if is_player_moving:
return # Ignore input if the player is already moving
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
var camera = get_viewport().get_camera_3d()
var from = camera.project_ray_origin(event.position)
var to = from + camera.project_ray_normal(event.position) * 1000
var click_position = raycast_to_grid(from, to)
if click_position != Vector2i(-1, -1):
move_player_to_clicked_position(click_position)
func raycast_to_grid(from: Vector3, to: Vector3) -> Vector2i:
var plane = Plane(Vector3.UP, cell_offset.y)
var intersection = plane.intersects_ray(from, to - from)
if intersection:
var adjusted_intersection = intersection - cell_offset
var grid_position = Vector2i(
floor(adjusted_intersection.x / cell_size.x),
floor(adjusted_intersection.z / cell_size.z)
)
if grid_position.x >= 0 and grid_position.x < enhanced_gridmap.columns and \
grid_position.y >= 0 and grid_position.y < enhanced_gridmap.rows:
return grid_position
return Vector2i(-1, -1)
func move_player_to_clicked_position(grid_position: Vector2i):
var cell_item = enhanced_gridmap.get_cell_item(Vector3i(grid_position.x, 0, grid_position.y))
for x in enhanced_gridmap.non_walkable_items.size():
if cell_item == enhanced_gridmap.non_walkable_items[x]:
print("Cannot move to non-walkable cell")
return
var path = enhanced_gridmap.find_path(Vector2(current_position), Vector2(grid_position))
if path.size() > 1:
path.pop_front()
move_player_along_path(path)
else:
print("No valid path found")
func move_player_along_path(path: Array):
is_player_moving = true
var tween = create_tween()
tween.set_trans(Tween.TRANS_CUBIC)
tween.set_ease(Tween.EASE_IN_OUT)
# Visualize the path using the plugin's function
#enhanced_gridmap.visualize_path(path)
for point in path:
var target_position = grid_to_world(Vector2i(point.x, point.y))
tween.tween_property(player, "position", target_position, 0.5)
tween.tween_callback(func():
current_position = Vector2i(path[-1].x, path[-1].y)
is_player_moving = false
enhanced_gridmap.clear_path_visualization()
)
func update_player_position(grid_position: Vector2i):
player.position = grid_to_world(grid_position)
func grid_to_world(grid_position: Vector2i) -> Vector3:
var world_position = Vector3(
grid_position.x * cell_size.x,
cell_size.y, # Place the player on top of the cell
grid_position.y * cell_size.z
)
# Center the player within the cell
world_position.x += cell_size.x * 0.5
world_position.z += cell_size.z * 0.5
return world_position + cell_offset
@@ -0,0 +1 @@
uid://dudbm0fqk82rm
+1 -1
View File
@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cak1euopkw681"
uid="uid://v4iur5pyy5b5"
path="res://.godot/imported/icon.png-55ce7476be277fe78f056db0afa06b3b.ctex"
metadata={
"vram_texture": false
@@ -1,121 +1,81 @@
[gd_resource type="MeshLibrary" load_steps=12 format=3 uid="uid://54tpx8cmksfc"]
[gd_resource type="MeshLibrary" load_steps=9 format=3 uid="uid://kcv6ans86ug7"]
[ext_resource type="ArrayMesh" uid="uid://dqguomxd16u0i" path="res://assets/models/meshes/start.res" id="1_xdwel"]
[ext_resource type="ArrayMesh" uid="uid://dspusnbkr74hg" path="res://assets/models/meshes/hover.res" id="2_5gp4i"]
[ext_resource type="Material" uid="uid://bsyh0x4cy5qyr" path="res://assets/models/meshes/end.tres" id="3_qi66w"]
[ext_resource type="ArrayMesh" uid="uid://dtr46jmckif0p" path="res://assets/models/meshes/block.res" id="4_8v5xv"]
[ext_resource type="ArrayMesh" uid="uid://d4himvyb81in8" path="res://assets/models/meshes/non-walkable.res" id="4_h83ju"]
[ext_resource type="ArrayMesh" uid="uid://bgvropltcot0q" path="res://assets/models/meshes/normal.res" id="5_san4u"]
[ext_resource type="ArrayMesh" uid="uid://36tgon3b60db" path="res://assets/models/tiles/tile_heart.tres" id="6_r6sve"]
[ext_resource type="ArrayMesh" uid="uid://dr80txgr61irt" path="res://assets/models/tiles/tile_diamond.tres" id="8_rj3ss"]
[ext_resource type="ArrayMesh" uid="uid://b5ta7tcw0iscd" path="res://assets/models/tiles/tile_coin.tres" id="9_44311"]
[ext_resource type="ArrayMesh" uid="uid://cv4bedhida00g" path="res://assets/models/tiles/tile_star.tres" id="9_y8bbi"]
[sub_resource type="PlaneMesh" id="PlaneMesh_ti6kf"]
material = ExtResource("3_qi66w")
size = Vector2(1, 1)
[ext_resource type="ArrayMesh" uid="uid://cr70nmk8djc1i" path="res://assets/models/meshes/tiles_armagedon_a3.res" id="1_ptqbt"]
[ext_resource type="ArrayMesh" uid="uid://dspusnbkr74hg" path="res://assets/models/meshes/hover.res" id="2_p5epg"]
[ext_resource type="ArrayMesh" uid="uid://dqguomxd16u0i" path="res://assets/models/meshes/start.res" id="3_8v5xv"]
[ext_resource type="ArrayMesh" uid="uid://b5ta7tcw0iscd" path="res://assets/models/tiles/tile_coin.tres" id="4_76xkl"]
[ext_resource type="ArrayMesh" uid="uid://d4himvyb81in8" path="res://assets/models/meshes/non-walkable.res" id="4_sx8rm"]
[ext_resource type="ArrayMesh" uid="uid://dr80txgr61irt" path="res://assets/models/tiles/tile_diamond.tres" id="5_j2mx0"]
[ext_resource type="ArrayMesh" uid="uid://36tgon3b60db" path="res://assets/models/tiles/tile_heart.tres" id="6_ptqbt"]
[ext_resource type="ArrayMesh" uid="uid://cv4bedhida00g" path="res://assets/models/tiles/tile_star.tres" id="7_p5epg"]
[resource]
item/0/name = "normal"
item/0/mesh = ExtResource("1_xdwel")
item/0/mesh = ExtResource("1_ptqbt")
item/0/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/0/mesh_cast_shadow = 1
item/0/shapes = []
item/0/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/0/navigation_layers = 1
item/1/name = "hover"
item/1/mesh = ExtResource("2_5gp4i")
item/1/mesh = ExtResource("2_p5epg")
item/1/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/1/mesh_cast_shadow = 1
item/1/shapes = []
item/1/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/1/navigation_layers = 1
item/2/name = "start"
item/2/mesh = ExtResource("1_xdwel")
item/2/mesh = ExtResource("3_8v5xv")
item/2/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/2/mesh_cast_shadow = 1
item/2/shapes = []
item/2/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/2/navigation_layers = 1
item/3/name = "end"
item/3/mesh = SubResource("PlaneMesh_ti6kf")
item/3/mesh = ExtResource("3_8v5xv")
item/3/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/3/mesh_cast_shadow = 1
item/3/shapes = []
item/3/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/3/navigation_layers = 1
item/4/name = "non-walkable"
item/4/mesh = ExtResource("4_h83ju")
item/4/mesh = ExtResource("4_sx8rm")
item/4/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/4/mesh_cast_shadow = 1
item/4/shapes = []
item/4/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/4/navigation_layers = 1
item/6/name = "grass"
item/6/mesh = ExtResource("5_san4u")
item/5/name = "disable"
item/5/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/5/mesh_cast_shadow = 1
item/5/shapes = []
item/5/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/5/navigation_layers = 1
item/6/name = "tile_coin"
item/6/mesh = ExtResource("4_76xkl")
item/6/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/6/mesh_cast_shadow = 1
item/6/shapes = []
item/6/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/6/navigation_layers = 1
item/7/name = "tile_heart"
item/7/mesh = ExtResource("6_r6sve")
item/7/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.9, 0)
item/7/name = "tile_diamond"
item/7/mesh = ExtResource("5_j2mx0")
item/7/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/7/mesh_cast_shadow = 1
item/7/shapes = []
item/7/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/7/navigation_layers = 1
item/8/name = "tile_diamond"
item/8/mesh = ExtResource("8_rj3ss")
item/8/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.9, 0)
item/8/name = "tile_heart"
item/8/mesh = ExtResource("6_ptqbt")
item/8/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/8/mesh_cast_shadow = 1
item/8/shapes = []
item/8/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/8/navigation_layers = 1
item/9/name = "tile_star"
item/9/mesh = ExtResource("9_y8bbi")
item/9/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.9, 0)
item/9/mesh = ExtResource("7_p5epg")
item/9/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/9/mesh_cast_shadow = 1
item/9/shapes = []
item/9/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/9/navigation_layers = 1
item/10/name = "tile_coin"
item/10/mesh = ExtResource("9_44311")
item/10/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.9, 0)
item/10/mesh_cast_shadow = 1
item/10/shapes = []
item/10/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/10/navigation_layers = 1
item/11/name = "obstacle_block"
item/11/mesh = ExtResource("4_8v5xv")
item/11/mesh_transform = Transform3D(1.65, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0.5)
item/11/mesh_cast_shadow = 1
item/11/shapes = []
item/11/navigation_mesh_transform = Transform3D(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0)
item/11/navigation_layers = 1
item/12/name = "obstacle_block_h"
item/12/mesh = ExtResource("4_8v5xv")
item/12/mesh_transform = Transform3D(1.65, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, 0.5)
item/12/mesh_cast_shadow = 1
item/12/shapes = []
item/12/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/12/navigation_layers = 1
item/13/name = "obstacle_block_v"
item/13/mesh = ExtResource("4_8v5xv")
item/13/mesh_transform = Transform3D(1.65, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0.5)
item/13/mesh_cast_shadow = 1
item/13/shapes = []
item/13/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/13/navigation_layers = 1
item/14/name = ""
item/14/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/14/mesh_cast_shadow = 1
item/14/shapes = []
item/14/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/14/navigation_layers = 1
item/15/name = ""
item/15/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/15/mesh_cast_shadow = 1
item/15/shapes = []
item/15/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
item/15/navigation_layers = 1
@@ -0,0 +1,4 @@
[gd_resource type="StandardMaterial3D" load_steps=0 format=3 uid="uid://0fexqt03j3cb"]
[resource]
albedo_color = Color(0.265987, 0.565787, 0.525347, 1)
@@ -0,0 +1,4 @@
[gd_resource type="StandardMaterial3D" load_steps=0 format=3 uid="uid://cn1pvqd4gf1u7"]
[resource]
albedo_color = Color(0.26944, 0.347152, 0.674841, 1)
@@ -0,0 +1,4 @@
[gd_resource type="StandardMaterial3D" load_steps=0 format=3 uid="uid://dqhmv78u8iy1d"]
[resource]
albedo_color = Color(0.310617, 0.310617, 0.310617, 1)
@@ -0,0 +1,4 @@
[gd_resource type="StandardMaterial3D" load_steps=0 format=3 uid="uid://itptgndobbp3"]
[resource]
albedo_color = Color(0.236107, 0.423377, 0.339105, 1)
@@ -0,0 +1,7 @@
[gd_resource type="BoxMesh" load_steps=2 format=3 uid="uid://dcjdwbffgtutt"]
[ext_resource type="Material" uid="uid://0fexqt03j3cb" path="res://addons/enhanced_gridmap/meshlibrary/mat_end.tres" id="1_dvekp"]
[resource]
material = ExtResource("1_dvekp")
size = Vector3(1.9, 0.5, 1.9)
@@ -0,0 +1,7 @@
[gd_resource type="BoxMesh" load_steps=2 format=3 uid="uid://c1wa5rjlu0fuo"]
[ext_resource type="Material" uid="uid://cn1pvqd4gf1u7" path="res://addons/enhanced_gridmap/meshlibrary/mat_hover.tres" id="1_5fptl"]
[resource]
material = ExtResource("1_5fptl")
size = Vector3(1.9, 0.5, 1.9)
@@ -0,0 +1,7 @@
[gd_resource type="BoxMesh" load_steps=2 format=3 uid="uid://bb3b32qso3yab"]
[ext_resource type="Material" uid="uid://dqhmv78u8iy1d" path="res://addons/enhanced_gridmap/meshlibrary/mat_normal.tres" id="1_4kxai"]
[resource]
material = ExtResource("1_4kxai")
size = Vector3(1.9, 0.5, 1.9)
@@ -0,0 +1,7 @@
[gd_resource type="BoxMesh" load_steps=2 format=3 uid="uid://dy5p77cjb3geo"]
[ext_resource type="Material" uid="uid://cn1pvqd4gf1u7" path="res://addons/enhanced_gridmap/meshlibrary/mat_hover.tres" id="1_nrdsg"]
[resource]
material = ExtResource("1_nrdsg")
size = Vector3(1.9, 0.5, 1.9)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -3,5 +3,5 @@
[resource]
resource_name = "tile_a1"
cull_mode = 2
albedo_color = Color(0.335217, 0.328683, 0.29189, 1)
albedo_color = Color(0.380392, 0.372549, 0.333333, 1)
roughness = 0.5
+3 -3
View File
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="tekton-local"
run/main_scene="res://scenes/main_scene.tscn"
run/main_scene="uid://dxn87yj8qnfpp"
config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="res://icon.svg"
@@ -24,8 +24,8 @@ BeehaveGlobalDebugger="*res://addons/beehave/debug/global_debugger.gd"
window/size/viewport_width=1366
window/size/viewport_height=720
window/size/window_width_override=1024
window/size/window_height_override=576
window/size/window_width_override=1920
window/size/window_height_override=1080
window/stretch/mode="viewport"
[editor_plugins]
+12 -7
View File
File diff suppressed because one or more lines are too long