You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.3 KiB
GDScript
163 lines
5.3 KiB
GDScript
extends Node3D
|
|
class_name Status
|
|
|
|
class SkillOrder:
|
|
var skill_cfg: SkillCfg
|
|
var cast_dir: Vector2
|
|
var target: int
|
|
|
|
|
|
class BulletOrder:
|
|
var bullet_cfg: CharacterCfg
|
|
var cast_dir: Vector2
|
|
var target: int
|
|
|
|
signal character_status_changed
|
|
|
|
#实体属性
|
|
var id: int # id
|
|
var owner_id: int # 所有者id
|
|
var sub_character_id: int # 伴生随从id
|
|
var team: Enum.ETeam # 队伍
|
|
#静态属性
|
|
var cfg: CharacterCfg # 配置表
|
|
var height: float # 受击框高度
|
|
var radius: float # 受击框半径
|
|
#战斗状态
|
|
var hp: float # 当前血量
|
|
var hp_max: float # 血量最大值
|
|
var shield: float # 当前护盾
|
|
var shield_max: float # 护盾最大值
|
|
var stun: float # 当前眩晕值
|
|
var stun_max: float # 眩晕值最大值
|
|
var mp: int # mp最大值
|
|
var mp_max: int # mp最大值
|
|
var mp_sub: float # 次级mp
|
|
var mp_sub_max: float # 次级mp最大值
|
|
var is_dead: bool # 是否死亡
|
|
var target: int # 目标角色
|
|
var is_lock: bool # 是否主动锁定
|
|
var throw_target: int # 投技目标
|
|
var break_level_def: int # 硬直抗性等级
|
|
#表现状态
|
|
var basic_offset: Vector3 # 基本偏移值
|
|
var shake_offset: Vector3 # 抖动偏移值
|
|
var ui_offset: Vector3 # ui挂点偏移值
|
|
var ui_center_offset: Vector3 # ui中心挂点偏移值
|
|
var is_pause: bool # 是否暂停
|
|
var flash_white_rate: float # 闪白比例
|
|
var deformation_dir: Vector2 # 形变方向
|
|
var deformation_rate: float # 形变比例
|
|
#移动状态
|
|
var move_dir: Vector2 # 移动方向
|
|
var speed_dir: Vector2 # 速度方向
|
|
var velocity_change: Vector3 # 一帧内速度变化值
|
|
var speed_down_push_rate: float # 来自软阻挡的速度减少比率
|
|
|
|
@export var speed_up_rate: float # 移动速度比率
|
|
|
|
var speed_xz: float # 水平移动速度
|
|
var speed_y: float # 竖直移动速度
|
|
var is_free_control: bool = true # 是否可以自由控制
|
|
var is_on_floor: bool # 是否在地面
|
|
var is_free_turn: bool = true # 是否允许转向
|
|
var is_right: bool = true # 是否向右
|
|
var is_jumping: bool # 是否正在跳跃
|
|
var is_jumped: bool # 是否已跳跃
|
|
|
|
@export var is_speed_y_freeze: bool # 是否冻结竖直速度
|
|
|
|
#buff状态
|
|
var is_stagger: bool # 是否硬直
|
|
var is_stun: bool # 是否眩晕
|
|
var is_floating: bool # 是否正在浮空
|
|
var is_be_throw: bool # 是否被投
|
|
var is_rising: bool # 是否正在开始浮空
|
|
var hit_back_dir: Vector2 # 击退方向
|
|
var hit_back_speed: float # 击退速度
|
|
var hit_up_speed: float # 击飞速度
|
|
var pause_time: float # 卡帧时间
|
|
#技能状态
|
|
var skill_cfg: SkillCfg # 当前技能
|
|
var is_skill_running: bool # 技能是否正在释放
|
|
var skill_dir: Vector2 # 技能释放方向
|
|
var skill_move_dir: Vector2 # 技能位移方向
|
|
var skill_action_key: String # 技能输入指令
|
|
var skill_repeat_count: int # 技能重复释放次数
|
|
var is_hit_character: bool # 是否击中角色
|
|
var is_hit_wall: bool # 是否移动击中墙
|
|
|
|
@export var skill_move_speed: float # 技能位移速度
|
|
@export var skill_float_speed: float # 技能y位移速度
|
|
@export var skill_move_stop: bool # 技能位移速度是否停止生效
|
|
@export var skill_break_level_add: int # 技能额外打断等级
|
|
|
|
#核心状态
|
|
var core_active_list: Array[CoreCfg] = [] # 主动核心列表 8个
|
|
var core_passive_list: Array[CoreCfg] = [] # 被动核心列表
|
|
#玩家技能状态
|
|
var input_dir: Vector2 # 指令方向
|
|
|
|
@export var stance: Enum.EStance # 技能姿态
|
|
@export var break_level: Enum.EBreakLevel # 打断等级
|
|
|
|
var weapon_list: Array[WeaponCfg] = [] # 武器列表
|
|
var weapon_index: int # 当前武器下标
|
|
var weapon_index_change_dir: int # 武器下标操作变化方向
|
|
var weapon_index_change_rate: float # 武器下标操作变化进度
|
|
var is_switch: bool # 是否切换到核心释放模式
|
|
var is_charging: bool # 是否蓄力
|
|
var charging_level: int # 蓄力等级
|
|
#ai状态
|
|
var ai_role: int # ai角色
|
|
var ai_skill_order: Array[SkillOrder] = [] # ai技能指令
|
|
var ai_bullet_order: Array[BulletOrder] = [] # ai子弹指令
|
|
var ai_alert_max: float # 警戒值最大值
|
|
var ai_alert: float # 警戒值
|
|
var ai_is_alert: bool # 是否已激活
|
|
#动画状态
|
|
var current_animation: String
|
|
#动画触发器
|
|
var trigger_jump: bool # 跳跃
|
|
var trigger_hit: bool # 受击-地面-轻
|
|
var trigger_mhit: bool # 受击-地面-中
|
|
var trigger_lhit: bool # 受击-地面-重
|
|
var trigger_air_hit_up: bool # 受击-空中受击-向上
|
|
var trigger_air_hit_down: bool # 受击-空中受击-向上
|
|
var trigger_rebound: bool # 受击-反弹
|
|
var trigger_stun_hit: bool # 受击-眩晕
|
|
|
|
|
|
func get_status(status_name: String) -> Variant: return get(status_name)
|
|
|
|
|
|
func set_status(status_name: String, value: Variant):
|
|
if value == get_status(status_name):
|
|
return
|
|
set(status_name, value)
|
|
SignalManager.character_status_changed.emit(id, status_name, value)
|
|
character_status_changed.emit(status_name, value)
|
|
|
|
|
|
func emit_status(status_name: String):
|
|
SignalManager.character_status_changed.emit(id, status_name, get_status(status_name))
|
|
character_status_changed.emit(status_name, get_status(status_name))
|
|
|
|
|
|
func set_shield(value: float):
|
|
shield = value
|
|
refresh_break_level_def()
|
|
emit_status("shield")
|
|
|
|
|
|
func set_skill_break_level_add(value: int):
|
|
skill_break_level_add = value
|
|
refresh_break_level_def()
|
|
emit_status("skill_break_level_add")
|
|
|
|
|
|
func refresh_break_level_def():
|
|
break_level_def = cfg.shield.break_level_on if shield > 0 else cfg.shield.break_level_off
|
|
break_level_def += skill_break_level_add
|
|
emit_status("break_level_def")
|