Behavior: Flips player’s gravity only when standing on it.
public GameObject exitDoor; private int fragmentsCollected = 0; private int totalFragments = 3; void OnFragmentCollected(int id)
public Vector2 localGravity = Vector2.down; public float strengthMultiplier = 1.5f; public bool overrideGlobal = true; void OnTriggerEnter2D(Collider2D other) gravity files remake code
public class MomentumPreserver : MonoBehaviour
private Vector2 velocityBeforeFlip; void OnEnable() => EventManager.OnGravityFlip += StoreAndApply; void OnDisable() => EventManager.OnGravityFlip -= StoreAndApply; Behavior: Flips player’s gravity only when standing on it
public float gravityStrength = 9.81f; public float flipCooldown = 0.5f; private float lastFlipTime;
if (Input.GetButtonDown("FlipGravity")) GravityManager.Instance.FlipGravity(); float move = Input.GetAxis("Horizontal"); rb.velocity = new Vector2(move * speed, rb.velocity.y); // Adjust ground detection based on gravity direction Vector2 checkDirection = (GravityManager.Instance.currentGravity == GravityDirection.Down) ? Vector2.down : Vector2.up; isGrounded = Physics2D.Raycast(groundCheck.position, checkDirection, 0.1f, groundMask); // Flip player sprite visually transform.localScale = new Vector3(transform.localScale.x, (GravityManager.Instance.currentGravity == GravityDirection.Down) ? 1 : -1, 1); 1 : -1
fragmentsCollected++; if (fragmentsCollected >= totalFragments) exitDoor.SetActive(true);