From 74652d09e79dcf7df28026b573decd69e40f1cdb Mon Sep 17 00:00:00 2001
From: Alexejhero <32238504+Alexejhero@users.noreply.github.com>
Date: Mon, 25 Mar 2024 04:05:31 +0100
Subject: [PATCH] Fix ghost shadows
---
README.md | 2 +-
.../Floors/Objects/GenericShadowBehaviour.cs | 2 ++
.../Floors/Objects/LongPlayerShadowRenderer.cs | 2 +-
.../Floors/Objects/PlayerShadowRenderer.cs | 17 +++++++++++++++++
.../Floors/Objects/RelativeShadowRenderer.cs | 4 +++-
Submerged/Submerged.csproj | 2 +-
6 files changed, 25 insertions(+), 4 deletions(-)
create mode 100644 Submerged/Floors/Objects/PlayerShadowRenderer.cs
diff --git a/README.md b/README.md
index f7cfbc6..71dd031 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ The table below lists the most recent Submerged release for each Among Us versio
| Among Us Version | Submerged Version | Links |
|:---------------------------------------------------------------------------------------------:|:-----------------:|:-----------------------------------------------------------------------------------:|
-| `v2024.3.5` | `v2024.3.24` | [Download](https://github.com/SubmergedAmongUs/Submerged/releases/tag/v2024.3.24/) |
+| `v2024.3.5` | `v2024.3.25` | [Download](https://github.com/SubmergedAmongUs/Submerged/releases/tag/v2024.3.25/) |
| `v2023.11.28` | `v2023.11.29` | [Download](https://github.com/SubmergedAmongUs/Submerged/releases/tag/v2023.11.29/) |
| `v2023.10.24` | `v2023.11.2` | [Download](https://github.com/SubmergedAmongUs/Submerged/releases/tag/v2023.11.2/) |
| `v2023.7.12`
`v2023.7.11` | `v2023.8.2` | [Download](https://github.com/SubmergedAmongUs/Submerged/releases/tag/v2023.8.2/) |
diff --git a/Submerged/Floors/Objects/GenericShadowBehaviour.cs b/Submerged/Floors/Objects/GenericShadowBehaviour.cs
index 295bcb9..e6c4e6a 100644
--- a/Submerged/Floors/Objects/GenericShadowBehaviour.cs
+++ b/Submerged/Floors/Objects/GenericShadowBehaviour.cs
@@ -16,7 +16,9 @@ public sealed class GenericShadowBehaviour(nint ptr) : MonoBehaviour(ptr)
static GenericShadowBehaviour()
{
+ // Overrides added earlier have higher priority (smaller index goes first)
ShadowTypeOverrides.Add(obj => obj.gameObject.GetComponentInParent(true) ? typeof(LongPlayerShadowRenderer) : null);
+ ShadowTypeOverrides.Add(obj => obj.gameObject.GetComponentInParent() ? typeof(PlayerShadowRenderer) : null);
ShadowTypeOverrides.Add(obj => obj.gameObject.GetComponent() ? typeof(DeadBodyShadowRenderer) : null);
}
diff --git a/Submerged/Floors/Objects/LongPlayerShadowRenderer.cs b/Submerged/Floors/Objects/LongPlayerShadowRenderer.cs
index 8ceb772..204d06f 100644
--- a/Submerged/Floors/Objects/LongPlayerShadowRenderer.cs
+++ b/Submerged/Floors/Objects/LongPlayerShadowRenderer.cs
@@ -4,7 +4,7 @@
namespace Submerged.Floors.Objects;
[RegisterInIl2Cpp]
-public class LongPlayerShadowRenderer(nint ptr) : RelativeShadowRenderer(ptr)
+public class LongPlayerShadowRenderer(nint ptr) : PlayerShadowRenderer(ptr)
{
public LongBoiPlayerBody body;
diff --git a/Submerged/Floors/Objects/PlayerShadowRenderer.cs b/Submerged/Floors/Objects/PlayerShadowRenderer.cs
new file mode 100644
index 0000000..b81c51b
--- /dev/null
+++ b/Submerged/Floors/Objects/PlayerShadowRenderer.cs
@@ -0,0 +1,17 @@
+using Reactor.Utilities.Attributes;
+
+namespace Submerged.Floors.Objects;
+
+[RegisterInIl2Cpp]
+public class PlayerShadowRenderer(nint ptr) : RelativeShadowRenderer(ptr)
+{
+ public PlayerControl player;
+
+ protected override void Start()
+ {
+ base.Start();
+ player = GetComponentInParent();
+ }
+
+ public override bool EnableShadow => player.isDummy || (!player.Data.IsDead && !player.Data.Disconnected);
+}
diff --git a/Submerged/Floors/Objects/RelativeShadowRenderer.cs b/Submerged/Floors/Objects/RelativeShadowRenderer.cs
index 830dac2..df6d490 100644
--- a/Submerged/Floors/Objects/RelativeShadowRenderer.cs
+++ b/Submerged/Floors/Objects/RelativeShadowRenderer.cs
@@ -20,6 +20,8 @@ public class RelativeShadowRenderer(nint ptr) : MonoBehaviour(ptr)
private readonly Dictionary _cachedSprites = [];
+ public virtual bool EnableShadow => true;
+
protected virtual void Awake()
{
gameObject.layer = 4;
@@ -48,7 +50,7 @@ protected virtual void LateUpdate()
if (targetRenderer)
{
- shadowRenderer.enabled = targetRenderer.enabled && targetRenderer.gameObject.activeInHierarchy;
+ shadowRenderer.enabled = targetRenderer.enabled && targetRenderer.gameObject.activeInHierarchy && EnableShadow;
shadowRenderer.sprite = GetReplacementSprite(targetRenderer.sprite);
shadowRenderer.SetColorAlpha(targetRenderer.color.a);
shadowRenderer.flipX = targetRenderer.flipX;
diff --git a/Submerged/Submerged.csproj b/Submerged/Submerged.csproj
index e716304..9e2cdb5 100644
--- a/Submerged/Submerged.csproj
+++ b/Submerged/Submerged.csproj
@@ -1,6 +1,6 @@
- 2024.3.24
+ 2024.3.25
Submerged Team
git
https://github.com/SubmergedAmongUs/Submerged