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: AssemblyTitle("Show Bolt Size")]
|
||||||
[assembly: AssemblyProduct("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: AssemblyDescription("Shows the size of the bolt you look at, so you pick the right wrench.")]
|
||||||
[assembly: AssemblyVersion("1.0.3.0")]
|
[assembly: AssemblyVersion("1.0.4.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.3.0")]
|
[assembly: AssemblyFileVersion("1.0.4.0")]
|
||||||
[assembly: AssemblyInformationalVersion("1.0.3")]
|
[assembly: AssemblyInformationalVersion("1.0.4")]
|
||||||
|
|
||||||
namespace ShowBoltSize
|
namespace ShowBoltSize
|
||||||
{
|
{
|
||||||
@@ -22,7 +22,7 @@ namespace ShowBoltSize
|
|||||||
{
|
{
|
||||||
public override string ID { get { return "showboltsize"; } }
|
public override string ID { get { return "showboltsize"; } }
|
||||||
public override string Name { get { return "Show Bolt Size"; } }
|
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"; } }
|
public override string Author { get { return "MBM"; } }
|
||||||
|
|
||||||
const float MaxDistance = 1.5f;
|
const float MaxDistance = 1.5f;
|
||||||
@@ -126,14 +126,18 @@ namespace ShowBoltSize
|
|||||||
{
|
{
|
||||||
if (toolCheck == null)
|
if (toolCheck == null)
|
||||||
{
|
{
|
||||||
Transform raycast = cam.transform.Find("2Spanner/Raycast");
|
// Werkzeug-FSM suchen - auch inaktive Objekte (ohne Werkzeug in der Hand ist sie aus), höchstens alle 5 s
|
||||||
if (raycast == null) return 0f;
|
if (Time.realtimeSinceStartup < nextToolSearch) return 0f;
|
||||||
foreach (PlayMakerFSM f in raycast.GetComponents<PlayMakerFSM>())
|
nextToolSearch = Time.realtimeSinceStartup + 5f;
|
||||||
if (f.FsmName == "Check") { toolCheck = f; break; }
|
toolCheck = FindToolCheck(cam);
|
||||||
if (toolCheck == null) return 0f;
|
if (toolCheck == null)
|
||||||
|
{
|
||||||
|
if (!toolMissingLogged) { toolMissingLogged = true; Log("tool FSM (Spanner/Raycast 'Check') not found yet"); }
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
toolSize = toolCheck.FsmVariables.FindFsmFloat("BoltSize");
|
toolSize = toolCheck.FsmVariables.FindFsmFloat("BoltSize");
|
||||||
toolSizeI = toolCheck.FsmVariables.FindFsmInt("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 (!toolCheck.gameObject.activeInHierarchy || !toolCheck.enabled) return 0f;
|
||||||
if (!dumped)
|
if (!dumped)
|
||||||
@@ -142,7 +146,7 @@ namespace ShowBoltSize
|
|||||||
else if (Time.realtimeSinceStartup >= dumpAt)
|
else if (Time.realtimeSinceStartup >= dumpAt)
|
||||||
{
|
{
|
||||||
dumped = true;
|
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); }
|
catch (System.Exception e) { Log("tool dump failed: " + e.Message); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,18 +155,62 @@ namespace ShowBoltSize
|
|||||||
{
|
{
|
||||||
lastToolSize = value;
|
lastToolSize = value;
|
||||||
toolLogs++;
|
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;
|
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)
|
static string Info(Bolt b, Vector3 eyePos, Vector3 forward)
|
||||||
{
|
{
|
||||||
Vector3 to = Center(b) - eyePos;
|
Vector3 to = Center(b) - eyePos;
|
||||||
float raw = b.SizeF != null ? b.SizeF.Value : (b.SizeI != null ? b.SizeI.Value : -1);
|
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 : "-")
|
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"
|
+ ", 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>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user