Show Bolt Size 1.0.4: find the wrench 'Check' FSM among inactive objects too, log wrench size, bolt scale, mesh size and all FSM numbers for diagnosis
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,9 +7,9 @@ using UnityEngine;
|
||||
[assembly: AssemblyTitle("Show Bolt Size")]
|
||||
[assembly: AssemblyProduct("Show Bolt Size")]
|
||||
[assembly: AssemblyDescription("Shows the size of the bolt you look at, so you pick the right wrench.")]
|
||||
[assembly: AssemblyVersion("1.0.3.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.3.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.3")]
|
||||
[assembly: AssemblyVersion("1.0.4.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.4.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.4")]
|
||||
|
||||
namespace ShowBoltSize
|
||||
{
|
||||
@@ -22,7 +22,7 @@ namespace ShowBoltSize
|
||||
{
|
||||
public override string ID { get { return "showboltsize"; } }
|
||||
public override string Name { get { return "Show Bolt Size"; } }
|
||||
public override string Version { get { return "1.0.3"; } }
|
||||
public override string Version { get { return "1.0.4"; } }
|
||||
public override string Author { get { return "MBM"; } }
|
||||
|
||||
const float MaxDistance = 1.5f;
|
||||
@@ -126,14 +126,18 @@ namespace ShowBoltSize
|
||||
{
|
||||
if (toolCheck == null)
|
||||
{
|
||||
Transform raycast = cam.transform.Find("2Spanner/Raycast");
|
||||
if (raycast == null) return 0f;
|
||||
foreach (PlayMakerFSM f in raycast.GetComponents<PlayMakerFSM>())
|
||||
if (f.FsmName == "Check") { toolCheck = f; break; }
|
||||
if (toolCheck == null) return 0f;
|
||||
// Werkzeug-FSM suchen - auch inaktive Objekte (ohne Werkzeug in der Hand ist sie aus), höchstens alle 5 s
|
||||
if (Time.realtimeSinceStartup < nextToolSearch) return 0f;
|
||||
nextToolSearch = Time.realtimeSinceStartup + 5f;
|
||||
toolCheck = FindToolCheck(cam);
|
||||
if (toolCheck == null)
|
||||
{
|
||||
if (!toolMissingLogged) { toolMissingLogged = true; Log("tool FSM (Spanner/Raycast 'Check') not found yet"); }
|
||||
return 0f;
|
||||
}
|
||||
toolSize = toolCheck.FsmVariables.FindFsmFloat("BoltSize");
|
||||
toolSizeI = toolCheck.FsmVariables.FindFsmInt("BoltSize");
|
||||
Log("tool found: " + toolCheck.name + "/" + toolCheck.FsmName + (toolSize != null ? " with float BoltSize" : toolSizeI != null ? " with int BoltSize" : " without BoltSize"));
|
||||
Log("tool found: " + PathOf(toolCheck.transform) + " / " + toolCheck.FsmName + (toolSize != null ? " with float BoltSize" : toolSizeI != null ? " with int BoltSize" : " without BoltSize"));
|
||||
}
|
||||
if (!toolCheck.gameObject.activeInHierarchy || !toolCheck.enabled) return 0f;
|
||||
if (!dumped)
|
||||
@@ -142,7 +146,7 @@ namespace ShowBoltSize
|
||||
else if (Time.realtimeSinceStartup >= dumpAt)
|
||||
{
|
||||
dumped = true;
|
||||
try { Log("tool dump: " + FsmDump.Write("2spanner#0|raycast#0")); }
|
||||
try { Log("tool dump: " + FsmDump.Write("spanner#0|raycast")); }
|
||||
catch (System.Exception e) { Log("tool dump failed: " + e.Message); }
|
||||
}
|
||||
}
|
||||
@@ -151,18 +155,62 @@ namespace ShowBoltSize
|
||||
{
|
||||
lastToolSize = value;
|
||||
toolLogs++;
|
||||
Log("tool BoltSize=" + value + " (state " + toolCheck.ActiveStateName + ")");
|
||||
FsmFloat wrench = FsmVariables.GlobalVariables.FindFsmFloat("ToolWrenchSize");
|
||||
Log("tool BoltSize=" + value + " (state " + toolCheck.ActiveStateName + ", wrench size " + (wrench != null ? wrench.Value.ToString() : "?") + ")");
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
float nextToolSearch;
|
||||
bool toolMissingLogged;
|
||||
|
||||
/// <summary>"Check"-FSM unter ...Spanner/Raycast (Schraubenschlüssel/Ratsche des Spielers), auch wenn sie gerade aus ist.</summary>
|
||||
static PlayMakerFSM FindToolCheck(Camera cam)
|
||||
{
|
||||
Transform raycast = cam.transform.Find("2Spanner/Raycast");
|
||||
if (raycast != null)
|
||||
foreach (PlayMakerFSM f in raycast.GetComponents<PlayMakerFSM>())
|
||||
if (f.FsmName == "Check") return f;
|
||||
foreach (PlayMakerFSM f in Resources.FindObjectsOfTypeAll<PlayMakerFSM>())
|
||||
{
|
||||
if (f == null || f.FsmName != "Check" || f.gameObject.hideFlags != HideFlags.None) continue;
|
||||
Transform t = f.transform;
|
||||
if (t.name == "Raycast" && t.parent != null && t.parent.name.IndexOf("Spanner", System.StringComparison.OrdinalIgnoreCase) >= 0) return f;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static string PathOf(Transform t)
|
||||
{
|
||||
string path = t.name;
|
||||
for (Transform p = t.parent; p != null; p = p.parent) path = p.name + "/" + path;
|
||||
return path;
|
||||
}
|
||||
|
||||
/// <summary>Alle Zahlen-Variablen der FSMs auf der Schraube und darunter (wo steckt die Größe?).</summary>
|
||||
static string Numbers(Transform t)
|
||||
{
|
||||
var sb = new System.Text.StringBuilder();
|
||||
foreach (PlayMakerFSM f in t.GetComponentsInChildren<PlayMakerFSM>(true))
|
||||
{
|
||||
sb.Append(" [").Append(f.name).Append('/').Append(f.FsmName);
|
||||
foreach (FsmFloat v in f.FsmVariables.FloatVariables) sb.Append(' ').Append(v.Name).Append('=').Append(v.Value.ToString("0.###"));
|
||||
foreach (FsmInt v in f.FsmVariables.IntVariables) sb.Append(' ').Append(v.Name).Append('=').Append(v.Value);
|
||||
sb.Append(']');
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
static string Info(Bolt b, Vector3 eyePos, Vector3 forward)
|
||||
{
|
||||
Vector3 to = Center(b) - eyePos;
|
||||
float raw = b.SizeF != null ? b.SizeF.Value : (b.SizeI != null ? b.SizeI.Value : -1);
|
||||
return b.Transform.name + " under " + (b.Transform.parent != null ? b.Transform.parent.name : "-")
|
||||
+ ", distance " + Vector3.Dot(to, forward).ToString("0.00") + " m, off the line " + (Vector3.Cross(forward, to).magnitude * 100f).ToString("0") + " cm"
|
||||
+ ", angle " + Vector3.Angle(forward, to).ToString("0.0") + "°, BoltSize=" + raw + (b.Renderer != null ? "" : " (no renderer)");
|
||||
+ ", angle " + Vector3.Angle(forward, to).ToString("0.0") + "°, BoltSize=" + raw + (b.Renderer != null ? "" : " (no renderer)")
|
||||
+ ", scale " + b.Transform.localScale.ToString("0.###") + " / world " + b.Transform.lossyScale.ToString("0.###")
|
||||
+ (b.Renderer != null ? ", mesh size " + (b.Renderer.bounds.size * 1000f).ToString("0") + " mm" : "")
|
||||
+ ", FSMs:" + Numbers(b.Transform);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user