public static IEnumerator CleanCoroutine(DeadBody body, Janitor role) { KillButtonTarget.SetTarget(DestroyableSingleton <HudManager> .Instance.KillButton, null, role); role.Player.SetKillTimer(PlayerControl.GameOptions.KillCooldown); var renderer = body.bodyRenderer; var backColor = renderer.material.GetColor(BackColor); var bodyColor = renderer.material.GetColor(BodyColor); var newColor = new Color(1f, 1f, 1f, 0f); for (var i = 0; i < 60; i++) { if (body == null) { yield break; } renderer.color = Color.Lerp(backColor, newColor, i / 60f); renderer.color = Color.Lerp(bodyColor, newColor, i / 60f); yield return(null); } Object.Destroy(body.gameObject); }
public static void Postfix(HudManager __instance) { if (PlayerControl.AllPlayerControls.Count <= 1) { return; } if (PlayerControl.LocalPlayer == null) { return; } if (PlayerControl.LocalPlayer.Data == null) { return; } if (!PlayerControl.LocalPlayer.Is(RoleEnum.Janitor)) { return; } var role = Role.GetRole <Janitor>(PlayerControl.LocalPlayer); if (role.CleanButton == null) { role.CleanButton = Object.Instantiate(__instance.KillButton, HudManager.Instance.transform); role.CleanButton.renderer.enabled = true; } role.CleanButton.gameObject.SetActive(!PlayerControl.LocalPlayer.Data.IsDead && !MeetingHud.Instance); var position = __instance.KillButton.transform.localPosition; role.CleanButton.transform.localPosition = new Vector3(position.x, __instance.ReportButton.transform.localPosition.y, position.z); role.CleanButton.renderer.sprite = TownOfUs.JanitorClean; var data = PlayerControl.LocalPlayer.Data; var isDead = data.IsDead; var truePosition = PlayerControl.LocalPlayer.GetTruePosition(); var maxDistance = GameOptionsData.KillDistances[PlayerControl.GameOptions.KillDistance]; var flag = (PlayerControl.GameOptions.GhostsDoTasks || !data.IsDead) && (!AmongUsClient.Instance || !AmongUsClient.Instance.IsGameOver) && PlayerControl.LocalPlayer.CanMove; var allocs = Physics2D.OverlapCircleAll(truePosition, maxDistance, LayerMask.GetMask(new[] { "Players", "Ghost" })); var killButton = role.CleanButton; DeadBody closestBody = null; var closestDistance = float.MaxValue; foreach (var collider2D in allocs) { if (!flag || isDead || collider2D.tag != "DeadBody") { continue; } var component = collider2D.GetComponent <DeadBody>(); if (!(Vector2.Distance(truePosition, component.TruePosition) <= maxDistance)) { continue; } var distance = Vector2.Distance(truePosition, component.TruePosition); if (!(distance < closestDistance)) { continue; } closestBody = component; closestDistance = distance; } KillButtonTarget.SetTarget(killButton, closestBody, role); role.CleanButton.SetCoolDown(PlayerControl.LocalPlayer.killTimer, PlayerControl.GameOptions.KillCooldown); }