Skip to content

Commit

Permalink
internationally renowned physics bro suggests hyperbolic trajectories
Browse files Browse the repository at this point in the history
  • Loading branch information
RidwanSharkar committed Nov 19, 2024
1 parent ad5a939 commit 03e3919
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions warpgate/Exoplanet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,13 @@ const Exoplanet: React.FC<ExoplanetProps> = ({ onRemove }) => {
// Proximity detection to the Sun
const distanceToSun = meshRef.current.position.length();

// Check for collision with sun
// Check for collision with sun FIRST, before any gravity calculations
if (distanceToSun < MIN_DISTANCE && isVisible) {
setCollisionPoint(meshRef.current.position.clone());
setShowExplosion(true);
setIsVisible(false);
// Immediately stop all motion
velocityRef.current.set(0, 0, 0);
setTimeout(() => {
onRemove();
}, 3000);
Expand All @@ -110,18 +112,30 @@ const Exoplanet: React.FC<ExoplanetProps> = ({ onRemove }) => {

// Apply continuous gravitational force when within threshold
if (distanceToSun < HYPERBOLIC_THRESHOLD) {
// Enhanced gravity when very close to sun
// Add a minimum distance clamp to prevent extreme gravity values
const clampedDistance = Math.max(distanceToSun, CLOSE_APPROACH_THRESHOLD * 0.5);

let gravityStrength = BASE_GRAVITY_STRENGTH;
if (distanceToSun < CLOSE_APPROACH_THRESHOLD) {
// Exponentially increase gravity strength for close approaches
gravityStrength *= (CLOSE_APPROACH_THRESHOLD / distanceToSun) ** 1.5;
// Limit the maximum gravity multiplier
const gravityMultiplier = Math.min(
(CLOSE_APPROACH_THRESHOLD / clampedDistance) ** 1.5,
4.0 // Maximum multiplier cap
);
gravityStrength *= gravityMultiplier;
}

const gravityMultiplier = gravityStrength / (distanceToSun * distanceToSun);
const gravityMultiplier = gravityStrength / (clampedDistance * clampedDistance);
const gravity = meshRef.current.position.clone()
.normalize()
.multiplyScalar(-gravityMultiplier);

// Limit the maximum gravity force
const maxGravityMagnitude = 0.5;
if (gravity.length() > maxGravityMagnitude) {
gravity.normalize().multiplyScalar(maxGravityMagnitude);
}

velocityRef.current.add(gravity);
}
}
Expand Down

0 comments on commit 03e3919

Please sign in to comment.