|
|
|
@ -24,11 +24,32 @@ func vector_reduce(vector: Vector2, reduce: float) -> Vector2:
|
|
|
|
return vector * scale_rate
|
|
|
|
return vector * scale_rate
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func raycast_wall(from: Vector3, to: Vector3) -> bool:
|
|
|
|
func get_level_grid_pos(pos: Vector3) -> Vector3i:
|
|
|
|
var space_state: PhysicsDirectSpaceState3D = get_world_3d().direct_space_state
|
|
|
|
var grid_size: float = Setting.pixel_size* Setting.grid_pixel_size
|
|
|
|
var query: PhysicsRayQueryParameters3D = PhysicsRayQueryParameters3D.create(from, to, 1)
|
|
|
|
var ret: Vector3i = Vector3i(get_div_scale(pos.x, grid_size), get_div_scale(pos.y, grid_size), get_div_scale(pos.z, grid_size))
|
|
|
|
var result: Dictionary = space_state.intersect_ray(query)
|
|
|
|
return ret
|
|
|
|
return result.size()>0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_level_float_pos(pos: Vector3i) -> Vector3:
|
|
|
|
|
|
|
|
var grid_size: float = Setting.pixel_size* Setting.grid_pixel_size
|
|
|
|
|
|
|
|
return Vector3(pos.x*grid_size, pos.y*grid_size, pos.z*grid_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_level_id(pos: Vector3) -> Vector3i:
|
|
|
|
|
|
|
|
var ret: Vector3i = Vector3i(get_div_scale(pos.x, Setting.size_basic.x), get_div_scale(pos.y, Setting.size_basic.y), get_div_scale(pos.z, Setting.size_basic.z))
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_div_scale(a: float, b: float) -> int:
|
|
|
|
|
|
|
|
#解决浮点数精度问题
|
|
|
|
|
|
|
|
var div: float = a / b
|
|
|
|
|
|
|
|
var is_positive: bool = div > 0
|
|
|
|
|
|
|
|
var decimal: float = abs(div - int(div))
|
|
|
|
|
|
|
|
if is_positive and decimal > 0.999:
|
|
|
|
|
|
|
|
div += 0.001
|
|
|
|
|
|
|
|
if not is_positive and decimal < 0.001:
|
|
|
|
|
|
|
|
div += 0.001
|
|
|
|
|
|
|
|
return floor(div)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func raycast_character(shape: Shape3D, origin: Vector3, dir: Vector2) -> Array[Character]:
|
|
|
|
func raycast_character(shape: Shape3D, origin: Vector3, dir: Vector2) -> Array[Character]:
|
|
|
|
@ -86,6 +107,7 @@ func refresh_mesh_library(path_list: Array, from_editor_tool: bool = false):
|
|
|
|
var default_shape_large_stair2: Array[Variant] = [load("res://resource/mesh_library/default_shape_large_stair2.tres") as Shape3D, Transform3D.IDENTITY]
|
|
|
|
var default_shape_large_stair2: Array[Variant] = [load("res://resource/mesh_library/default_shape_large_stair2.tres") as Shape3D, Transform3D.IDENTITY]
|
|
|
|
var mesh_library_level: MeshLibrary = load("res://resource/mesh_library/mesh_library_level.tres") as MeshLibrary
|
|
|
|
var mesh_library_level: MeshLibrary = load("res://resource/mesh_library/mesh_library_level.tres") as MeshLibrary
|
|
|
|
var mesh_library_ground: MeshLibrary = load("res://resource/mesh_library/mesh_library_ground.tres") as MeshLibrary
|
|
|
|
var mesh_library_ground: MeshLibrary = load("res://resource/mesh_library/mesh_library_ground.tres") as MeshLibrary
|
|
|
|
|
|
|
|
var mesh_library_character: MeshLibrary = load("res://resource/mesh_library/mesh_library_character.tres") as MeshLibrary
|
|
|
|
var material_block_normal: Material = load("res://render/material/grid_block.tres") as Material
|
|
|
|
var material_block_normal: Material = load("res://render/material/grid_block.tres") as Material
|
|
|
|
var material_block_link: Material = load("res://render/material/grid_block_link.tres") as Material
|
|
|
|
var material_block_link: Material = load("res://render/material/grid_block_link.tres") as Material
|
|
|
|
var mesh_library_level_id_list: Array[int] = []
|
|
|
|
var mesh_library_level_id_list: Array[int] = []
|
|
|
|
@ -98,8 +120,9 @@ func refresh_mesh_library(path_list: Array, from_editor_tool: bool = false):
|
|
|
|
var is_ground = mesh_name.begins_with("g_")
|
|
|
|
var is_ground = mesh_name.begins_with("g_")
|
|
|
|
if is_ground:
|
|
|
|
if is_ground:
|
|
|
|
mesh_name = mesh_name.trim_prefix("g_")
|
|
|
|
mesh_name = mesh_name.trim_prefix("g_")
|
|
|
|
|
|
|
|
var is_character = mesh_name.begins_with("c_")
|
|
|
|
var mesh: Mesh = load(file_name_full) as Mesh
|
|
|
|
var mesh: Mesh = load(file_name_full) as Mesh
|
|
|
|
var mesh_library: MeshLibrary = mesh_library_ground if is_ground else mesh_library_level
|
|
|
|
var mesh_library: MeshLibrary = mesh_library_ground if is_ground else (mesh_library_character if is_character else mesh_library_level)
|
|
|
|
var mesh_library_id_list: Array[int] = mesh_library_ground_id_list if is_ground else mesh_library_level_id_list
|
|
|
|
var mesh_library_id_list: Array[int] = mesh_library_ground_id_list if is_ground else mesh_library_level_id_list
|
|
|
|
var mesh_id: int = mesh_library.find_item_by_name(mesh_name)
|
|
|
|
var mesh_id: int = mesh_library.find_item_by_name(mesh_name)
|
|
|
|
if mesh_id == -1:
|
|
|
|
if mesh_id == -1:
|
|
|
|
@ -110,7 +133,7 @@ func refresh_mesh_library(path_list: Array, from_editor_tool: bool = false):
|
|
|
|
mesh_library.set_item_mesh(mesh_id, mesh)
|
|
|
|
mesh_library.set_item_mesh(mesh_id, mesh)
|
|
|
|
var material: Material = mesh.surface_get_material(0) as Material
|
|
|
|
var material: Material = mesh.surface_get_material(0) as Material
|
|
|
|
var material_set: Material = material_block_link if mesh_name.ends_with("_link") else material_block_normal
|
|
|
|
var material_set: Material = material_block_link if mesh_name.ends_with("_link") else material_block_normal
|
|
|
|
if (not material) or (material.get_path() != material_set.get_path()):
|
|
|
|
if (mesh.get_surface_count() >0) and (not material) or (material.get_path() != material_set.get_path()):
|
|
|
|
if from_editor_tool:
|
|
|
|
if from_editor_tool:
|
|
|
|
reimport_files.append(file_name_full)
|
|
|
|
reimport_files.append(file_name_full)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
@ -124,6 +147,7 @@ func refresh_mesh_library(path_list: Array, from_editor_tool: bool = false):
|
|
|
|
"h": item_shapes = default_shape_normal_half if not is_ground else default_shape_large_half
|
|
|
|
"h": item_shapes = default_shape_normal_half if not is_ground else default_shape_large_half
|
|
|
|
"s1": item_shapes = default_shape_normal_stair1 if not is_ground else default_shape_large_stair1
|
|
|
|
"s1": item_shapes = default_shape_normal_stair1 if not is_ground else default_shape_large_stair1
|
|
|
|
"s2": item_shapes = default_shape_normal_stair2 if not is_ground else default_shape_large_stair2
|
|
|
|
"s2": item_shapes = default_shape_normal_stair2 if not is_ground else default_shape_large_stair2
|
|
|
|
|
|
|
|
"c": pass
|
|
|
|
_: item_shapes = [mesh.create_convex_shape(), Transform3D.IDENTITY]
|
|
|
|
_: item_shapes = [mesh.create_convex_shape(), Transform3D.IDENTITY]
|
|
|
|
if item_shapes:
|
|
|
|
if item_shapes:
|
|
|
|
mesh_library.set_item_shapes(mesh_id, item_shapes)
|
|
|
|
mesh_library.set_item_shapes(mesh_id, item_shapes)
|
|
|
|
@ -250,3 +274,12 @@ func get_skill_player_weapon_by_weapon(weapon: WeaponCfg) -> Array[SkillWeaponCf
|
|
|
|
if res.weapon == weapon:
|
|
|
|
if res.weapon == weapon:
|
|
|
|
ret.append(res)
|
|
|
|
ret.append(res)
|
|
|
|
return ret
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_character_cfg_by_name(name: String) -> CharacterCfg:
|
|
|
|
|
|
|
|
var path_default: String = "res://config/character/%s.tres" % name
|
|
|
|
|
|
|
|
if ResourceLoader.exists(path_default):
|
|
|
|
|
|
|
|
var res = load(path_default)
|
|
|
|
|
|
|
|
if res is CharacterCfg:
|
|
|
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
return null
|