fix: 装备属性面板避让逻辑 + 多项功能更新

- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧
- inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域
- 包含其他累积的功能开发和测试文件
This commit is contained in:
shen
2026-09-21 16:38:59 -07:00
parent 1522a8a1a1
commit c93894313a
5498 changed files with 4558004 additions and 1442 deletions
+9 -2
View File
@@ -53,6 +53,11 @@ public:
void set_time_scale(double s) { time_scale = s; }
double get_time_scale() const { return time_scale; }
// 40250 CActorInstance::SetMotionLoopCount. A positive value overrides the
// current .msa LoopData count; zero restores the resource-defined count.
void set_motion_loop_count(int count);
int get_motion_loop_count() const { return motion_loop_count; }
// Crossfade duration (s) applied when anim_path changes while a clip is
// already playing (PARITY §2.9). 0 = hard cut (old behaviour).
void set_blend_time(double s) { blend_time = s < 0.0 ? 0.0 : s; }
@@ -67,7 +72,7 @@ public:
// .msa metadata (empty / zero when anim_path is a raw .gr2).
godot::Vector3 get_accumulation() const { return accumulation; }
godot::Array get_events() const; // [{type,start_time,effect,sound,pos}, ...]
godot::Array get_events() const; // detailed MotionEvent dictionaries, including type-specific payloads
// Full affine pose in model GR2 coordinates, shared by CPU/GPU and blending.
godot::Dictionary get_effect_bone_pose(const godot::String &bone);
godot::Dictionary get_loop_data() const;
@@ -97,6 +102,8 @@ private:
bool playing = true;
bool loop = true; // whole-clip playback mode; independent from .msa LoopData
double time_scale = 1.0;
int motion_loop_count = 0;
bool motion_loop_override = false;
double time = 0.0;
double duration = 0.0;
godot::String last_info;
@@ -125,7 +132,7 @@ private:
Metin2Model *resolve_model() const;
void apply_pose(double t);
void dispatch_events(double from, double to);
void dispatch_events(double from, double to, bool include_from = false);
// .msa path -> real motion .gr2 path; passes plain .gr2 paths through.
static godot::String resolve_anim_gr2(const godot::String &spec, const fmt::Msa &metadata);
};