Body step 2.1: climbing, mantling, crawling, legs, playground, 144 Hz
- Step rule + lower-body collider: no walking onto tables, steps <= 0.35 m - Structural hand strength: two-hand mantle/pull-up works, one hand can't - Arms aim from the physical shoulder horizontally, keep True Body pose vertically - Crawl pose, crawl carry, 35 deg slope limit, ground feed-forward ignores play-space corrections (fixes a runaway feedback loop) - Grab static world (climbing), procedural visual legs - Playground sandbox; menu strength slider, spectator (old drag) and turn toggles - Physics 144 Hz with interpolation; legacy chase-body spikes pin 90 Hz - RagdollSpike: 27 phases incl. mantle, pull-up, crawl, ledge drop, ramps Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d83273dd2f
commit
2aff2b61da
26 files changed
+1243
-70
No files matched your search
@@ -18,6 +18,9 @@ public partial class MainMenu : PanelContainer
|
||||
public event Action PingRequested;
|
||||
public event Action CloseRequested;
|
||||
public event Action Clicked;
|
||||
public event Action<bool> SpectatorToggled;
|
||||
public event Action<bool> SmoothTurnToggled;
|
||||
public event Action<float> StrengthChanged;
|
||||
|
||||
public TabContainer Tabs { get; private set; }
|
||||
public Button ReturnToSpawnButton { get; private set; }
|
||||
@@ -27,6 +30,9 @@ public partial class MainMenu : PanelContainer
|
||||
public Button CloseButton { get; private set; }
|
||||
public Button HeaderCloseButton { get; private set; }
|
||||
public HSlider ClickVolumeSlider { get; private set; }
|
||||
public HSlider StrengthSlider { get; private set; }
|
||||
public Button SpectatorButton { get; private set; }
|
||||
public Button TurnModeButton { get; private set; }
|
||||
public ScrollContainer LogScroll { get; private set; }
|
||||
|
||||
private Label _fpsLabel;
|
||||
@@ -116,6 +122,39 @@ public partial class MainMenu : PanelContainer
|
||||
_calibrationStatus.AddThemeColorOverride("font_color", new Color(0.6f, 0.6f, 0.65f));
|
||||
calibRow.AddChild(_calibrationStatus);
|
||||
player.AddChild(calibRow);
|
||||
|
||||
// Nimso's single strength value: every muscle and the hand guides scale with it.
|
||||
HBoxContainer strengthRow = new();
|
||||
strengthRow.AddThemeConstantOverride("separation", 20);
|
||||
Label strengthLabel = new() { Text = "Strength 1.00×", VerticalAlignment = VerticalAlignment.Center, CustomMinimumSize = new Vector2(220, 0) };
|
||||
strengthRow.AddChild(strengthLabel);
|
||||
StrengthSlider = new HSlider
|
||||
{
|
||||
MinValue = 0.25,
|
||||
MaxValue = 3,
|
||||
Step = 0.05,
|
||||
Value = 1,
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ShrinkCenter,
|
||||
CustomMinimumSize = new Vector2(0, 48),
|
||||
FocusMode = FocusModeEnum.None,
|
||||
};
|
||||
StrengthSlider.ValueChanged += v =>
|
||||
{
|
||||
strengthLabel.Text = $"Strength {v:0.00}×";
|
||||
StrengthChanged?.Invoke((float)v);
|
||||
};
|
||||
strengthRow.AddChild(StrengthSlider);
|
||||
player.AddChild(strengthRow);
|
||||
|
||||
HBoxContainer modeRow = new();
|
||||
modeRow.AddThemeConstantOverride("separation", 16);
|
||||
TurnModeButton = MakeToggle("Turning: snap", "Turning: smooth", on => SmoothTurnToggled?.Invoke(on));
|
||||
modeRow.AddChild(TurnModeButton);
|
||||
// Spectator: no body; fly around by grabbing the air (the old drag movement).
|
||||
SpectatorButton = MakeToggle("Spectator: off", "Spectator: on (grab-fly)", on => SpectatorToggled?.Invoke(on));
|
||||
modeRow.AddChild(SpectatorButton);
|
||||
player.AddChild(modeRow);
|
||||
Tabs.AddChild(player);
|
||||
|
||||
// World
|
||||
@@ -180,6 +219,25 @@ public partial class MainMenu : PanelContainer
|
||||
return page;
|
||||
}
|
||||
|
||||
private Button MakeToggle(string offText, string onText, Action<bool> changed)
|
||||
{
|
||||
Button button = new()
|
||||
{
|
||||
Text = offText,
|
||||
ToggleMode = true,
|
||||
CustomMinimumSize = new Vector2(0, ButtonHeight),
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
FocusMode = FocusModeEnum.None,
|
||||
};
|
||||
button.Toggled += on =>
|
||||
{
|
||||
button.Text = on ? onText : offText;
|
||||
Clicked?.Invoke();
|
||||
Callable.From(() => changed(on)).CallDeferred();
|
||||
};
|
||||
return button;
|
||||
}
|
||||
|
||||
private Button MakeButton(string text, Action action)
|
||||
{
|
||||
Button button = new()
|
||||
|
||||
Reference in new issue
Block a user