Спавнер: выбирать полноростовую сцену, а не портрет
У 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
+16
-8
@@ -148,19 +148,27 @@ public partial class RoomMap : Node2D
|
|||||||
if (p != null) ShowInfo(p);
|
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)
|
private static string ResolveScene(string name)
|
||||||
{
|
{
|
||||||
if (name == "baby") return "res://characters/baby/human_baby_native.tscn";
|
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}");
|
var dir = DirAccess.Open($"res://characters/{name}");
|
||||||
if (dir != null)
|
if (dir == null) return null;
|
||||||
|
var files = new List<string>();
|
||||||
foreach (var f in dir.GetFiles())
|
foreach (var f in dir.GetFiles())
|
||||||
if (f.EndsWith("_native.tscn")) return $"res://characters/{name}/{f}";
|
if (f.EndsWith("_native.tscn")) files.Add(f);
|
||||||
return null;
|
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()
|
private void BuildRoomHeaders()
|
||||||
|
|||||||
Reference in New Issue
Block a user