相机 lerp

master
chendian 2 years ago
parent eca354adf2
commit fe96be2dc2

File diff suppressed because one or more lines are too long

@ -13,10 +13,12 @@ func _physics_process(delta):
update_speed_y(delta)
update_move(delta)
character.move_and_slide()
if character.velocity or is_hit_floor:
if character.velocity:
SignalManager.character_pos_changed.emit(character.id(),character.pos())
SignalManager.character_ui_pos_changed.emit(character.id(),character.ui_pos())
SignalManager.character_status_changed.emit(status.id,"pos2d",character.pos2D())
if is_hit_floor:
SignalManager.character_hit_floor.emit(character.id(),character.pos())
func update_on_floor(delta) -> bool:
var is_on_floor = character.is_on_floor()

@ -2,30 +2,44 @@ extends Camera3D
class_name CameraManager
var target:int
var target_pos:Vector3 = Vector3.ZERO
var target_pos_now:Vector3 = Vector3.ZERO
var offset:Vector3 = Vector3(0,1,1) * 5
var level_size:Vector2
var camera_limit = Vector3(6.4,1.04,3.76) #x,up,z-downd
func _ready():
Global.camera_mgr = self
SignalManager.character_create.connect(on_character_create)
SignalManager.character_pos_changed.connect(on_character_pos_changed)
SignalManager.character_hit_floor.connect(on_character_hit_floor)
SignalManager.character_destroy.connect(on_character_destroy)
SignalManager.level_size_change.connect(on_level_size_change)
func _process(delta):
pass
func _physics_process(delta):
target_pos_lerp(0,delta,5)
target_pos_lerp(1,delta,5)
target_pos_lerp(2,delta,15)
position = target_pos_now + offset
func target_pos_lerp(index:int,delta:float,delta_scale:float):
if abs(target_pos_now[index] - target_pos[index]) < Setting.pixel_size:
target_pos_now[index] = Util.snap_float(target_pos[index])
else:
target_pos_now[index] = lerp(target_pos_now[index], target_pos[index], delta * delta_scale)
func on_character_create(id:int,team:Enum.ETeam,pos:Vector3):
if team == Enum.ETeam.Player:
target = id
func on_character_pos_changed(id:int,pos:Vector3):
var camera_limit = Vector3(6.4,1.04,3.6) #x,up,z-downd
if id == target:
pos.x = clamp(pos.x,camera_limit.x,level_size.x-camera_limit.x)
pos.z = clamp(pos.z,camera_limit.y,level_size.y-camera_limit.z)
pos.y = 0
position = Util.snap_vector3(pos + offset)
target_pos.x = clamp(pos.x,camera_limit.x,level_size.x-camera_limit.x)
target_pos.z = clamp(pos.z,camera_limit.y,level_size.y-camera_limit.z)
func on_character_hit_floor(id:int,pos:Vector3):
if id == target:
target_pos.y = pos.y
func on_character_destroy(id:int):
target = 0

@ -13,6 +13,7 @@ signal character_create
signal character_die
signal character_destroy
signal character_pos_changed
signal character_hit_floor
signal character_ui_pos_changed
signal character_status_changed
signal character_hit_text

Loading…
Cancel
Save