Skip to content

Instantly share code, notes, and snippets.

@Karan-Palan
Created April 1, 2024 10:21
Show Gist options
  • Save Karan-Palan/c58669f2c78a047ae075cb7b65ad6ac3 to your computer and use it in GitHub Desktop.
Save Karan-Palan/c58669f2c78a047ae075cb7b65ad6ac3 to your computer and use it in GitHub Desktop.
Collision demo
import React, { useEffect, useRef, useState } from 'react';
import { CollisionSpaceBrute, CollisionSpaceQuadTree } from '@/collision';
type CollisionDemoProps = {
// Props, if any
};
const CollisionDemo: React.FC<CollisionDemoProps> = () => {
// State variables for object properties and collision detection
const [objects, setObjects] = useState<{ id: string; x: number; y: number }[]>([]);
const [target, setTarget] = useState<{ x: number; y: number }>({ x: 0, y: 0 });
const colSpaceRef = useRef<HTMLDivElement | null>(null);
// useEffect hook for initializing collision space and handling mouse events
useEffect(() => {
// Logic for initializing collision space and objects
// Implement collision detection algorithm based on user choice (Brute or Quadtree)
// Event listener for mouse movement within collision space
const handleMouseMove = (e: MouseEvent) => {
// Update target object position based on mouse coordinates
// Perform collision detection and update state accordingly
};
// Add event listener to the collision space element
const colSpace = colSpaceRef.current!;
colSpace.addEventListener('mousemove', handleMouseMove);
// Cleanup function to remove event listener
return () => {
colSpace.removeEventListener('mousemove', handleMouseMove);
};
}, [/* Dependencies */]);
return (
<div className="collision-space-wrapper">
{/* Render controls and collision space */}
<div ref={colSpaceRef} className="collision-space">
{/* Render objects within collision space */}
{objects.map((obj) => (
<div
key={obj.id}
className="collision-space-object"
style={{ left: obj.x, top: obj.y }}
/>
))}
{/* Render target object */}
<div className="collision-space-object collision-space-object-target" />
</div>
</div>
);
};
export default CollisionDemo;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment