Спавнер: выбирать полноростовую сцену, а не портрет
У player скелеты названы player1_*, поэтому фолбэк брал первую по алфавиту (портрет). ResolveScene теперь исключает portrait/fetus/suckle/_body/_head/... и приоритетит combat -> stand -> любую полноростовую. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
4350f4a9e7
commit
bb16605129
+17
-9
@@ -148,19 +148,27 @@ public partial class RoomMap : Node2D
|
||||
if (p != null) ShowInfo(p);
|
||||
}
|
||||
|
||||
private static readonly string[] BadStems =
|
||||
{ "portrait", "fetus", "suckle", "_body", "_head", "dead", "birth", "milk", "down", "baby" };
|
||||
|
||||
private static string ResolveScene(string name)
|
||||
{
|
||||
if (name == "baby") return "res://characters/baby/human_baby_native.tscn";
|
||||
foreach (var s in new[] { "combat", "stand" })
|
||||
{
|
||||
string path = $"res://characters/{name}/{name}_{s}_native.tscn";
|
||||
if (ResourceLoader.Exists(path)) return path;
|
||||
}
|
||||
var dir = DirAccess.Open($"res://characters/{name}");
|
||||
if (dir != null)
|
||||
foreach (var f in dir.GetFiles())
|
||||
if (f.EndsWith("_native.tscn")) return $"res://characters/{name}/{f}";
|
||||
return null;
|
||||
if (dir == null) return null;
|
||||
var files = new List<string>();
|
||||
foreach (var f in dir.GetFiles())
|
||||
if (f.EndsWith("_native.tscn")) files.Add(f);
|
||||
if (files.Count == 0) return null;
|
||||
|
||||
bool Good(string f) { var l = f.ToLower(); foreach (var b in BadStems) if (l.Contains(b)) return false; return true; }
|
||||
// приоритет: combat -> stand -> любая полноростовая (не портрет/не частичная)
|
||||
foreach (var key in new[] { "combat", "stand" })
|
||||
foreach (var f in files)
|
||||
if (Good(f) && f.ToLower().Contains(key)) return $"res://characters/{name}/{f}";
|
||||
foreach (var f in files)
|
||||
if (Good(f)) return $"res://characters/{name}/{f}";
|
||||
return $"res://characters/{name}/{files[0]}";
|
||||
}
|
||||
|
||||
private void BuildRoomHeaders()
|
||||
|
||||
Reference in New Issue
Block a user