{"version":3,"sources":["../src/index.ts","../src/Character.tsx","../src/utils.ts","../src/Canvas.tsx","../src/Camera.tsx","../src/Object.tsx"],"sourcesContent":["// import every component in here.\r\n\r\nexport { default as Character } from \"./Character.tsx\";\r\nexport { default as Canvas } from \"./Canvas.tsx\";\r\nexport { default as Camera } from \"./Camera.tsx\";\r\nexport { default as GameObject } from \"./Object.tsx\";\r\n","\"use client\";\r\n\r\nimport React, {\r\n  type ReactNode,\r\n  useEffect,\r\n  useRef,\r\n  useState,\r\n  forwardRef,\r\n} from \"react\";\r\nimport { basicGravity, basicJumpHeight } from \"./utils.ts\";\r\n\r\ninterface CharacterProps {\r\n  gravity?: number; // Gravity force (positive = downward in world)\r\n  jumpHeight?: number; // Initial jump velocity\r\n  controls?: string[]; // [\"KeyW\",\"KeyA\",\"KeyD\",\"ShiftLeft\"]\r\n  sprint?: boolean; // Enable sprint\r\n  sprintMultiplier?: number; // Sprint speed multiplier\r\n  speed?: number; // Base speed in px/frame\r\n  jump?: boolean; // Enable jump\r\n  jumpCount?: number; // How many jumps allowed (1=normal, 2=double jump, etc.)\r\n  lockControls?: boolean; // Disable movement\r\n  onAction?: (action: string, payload?: any) => void;\r\n  objects?: { x: number; y: number; width: number; height: number }[]; // Collidable objects\r\n  movingPlatforms?: {\r\n    x: number;\r\n    y: number;\r\n    width: number;\r\n    height: number;\r\n    deltaX?: number;\r\n    deltaY?: number;\r\n  }[];\r\n  children?: ReactNode;\r\n  [key: string]: any;\r\n}\r\n\r\n// Simple AABB (Axis-Aligned Bounding Box) overlap check\r\nfunction aabbOverlap(\r\n  ax: number,\r\n  ay: number,\r\n  aw: number,\r\n  ah: number,\r\n  bx: number,\r\n  by: number,\r\n  bw: number,\r\n  bh: number\r\n) {\r\n  const aLeft = ax,\r\n    aRight = ax + aw;\r\n  const aBottom = ay,\r\n    aTop = ay + ah;\r\n  const bLeft = bx,\r\n    bRight = bx + bw;\r\n  const bBottom = by,\r\n    bTop = by + bh;\r\n  return aLeft < bRight && aRight > bLeft && aBottom < bTop && aTop > bBottom;\r\n}\r\n\r\nconst Character = forwardRef<HTMLDivElement, CharacterProps>(function Character(\r\n  {\r\n    gravity = basicGravity,\r\n    jumpHeight = basicJumpHeight,\r\n    controls = [\"KeyW\", \"KeyA\", \"KeyD\", \"ShiftLeft\"],\r\n    sprint = true,\r\n    sprintMultiplier = 1.4,\r\n    speed = 5,\r\n    jump = true,\r\n    jumpCount = 1,\r\n    lockControls = false,\r\n    onAction,\r\n    objects = [],\r\n    children,\r\n    movingPlatforms = [],\r\n    ...rest\r\n  },\r\n  externalRef\r\n) {\r\n  const keysPressed = useRef<Set<string>>(new Set());\r\n  const velocityY = useRef(0);\r\n  const groundedRef = useRef(true); // Is the player on the ground?\r\n  const lastAction = useRef<string>(\"idle\");\r\n\r\n  const [action, setAction] = useState<string>(\"idle\");\r\n  const [pos, setPos] = useState({ x: 0, y: 0 });\r\n  const [facing, setFacing] = useState<1 | -1>(1);\r\n\r\n  // Combine external ref (from parent) with internal ref (for size & collision)\r\n  const nodeRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const currentJumps = useRef(0);\r\n  const jumpPressedLastFrame = useRef(false);\r\n\r\n  const setRefs = (el: HTMLDivElement | null) => {\r\n    nodeRef.current = el;\r\n    if (typeof externalRef === \"function\") externalRef(el);\r\n    else if (externalRef)\r\n      (externalRef as React.MutableRefObject<HTMLDivElement | null>).current =\r\n        el;\r\n  };\r\n\r\n  // Keyboard input handling\r\n  useEffect(() => {\r\n    const down = (e: KeyboardEvent) => keysPressed.current.add(e.code);\r\n    const up = (e: KeyboardEvent) => keysPressed.current.delete(e.code);\r\n    const blur = () => keysPressed.current.clear();\r\n    window.addEventListener(\"keydown\", down);\r\n    window.addEventListener(\"keyup\", up);\r\n    window.addEventListener(\"blur\", blur);\r\n    return () => {\r\n      window.removeEventListener(\"keydown\", down);\r\n      window.removeEventListener(\"keyup\", up);\r\n      window.removeEventListener(\"blur\", blur);\r\n    };\r\n  }, []);\r\n\r\n  // Notify parent when action changes\r\n  useEffect(() => {\r\n    if (!onAction) return;\r\n    if (action !== lastAction.current) {\r\n      onAction(action, {\r\n        x: pos.x,\r\n        y: pos.y,\r\n        vy: velocityY.current,\r\n        grounded: groundedRef.current,\r\n      });\r\n      lastAction.current = action;\r\n    }\r\n  }, [action, pos, onAction]);\r\n\r\n  // Main physics loop\r\n  useEffect(() => {\r\n    let raf: number;\r\n    const dt = 1 / 60;\r\n\r\n    const loop = () => {\r\n      if (!lockControls) {\r\n        setPos((prev) => {\r\n          // Character dimensions (fallback: 50x50 if unknown)\r\n          const rect = nodeRef.current?.getBoundingClientRect();\r\n          const cw = Math.max(1, rect?.width ?? 50);\r\n          const ch = Math.max(1, rect?.height ?? 50);\r\n\r\n          // Movement base speed (with sprinting)\r\n          const isSprint =\r\n            sprint &&\r\n            (keysPressed.current.has(controls[3]) ||\r\n              keysPressed.current.has(\"ShiftRight\"));\r\n          const base = speed * (isSprint ? sprintMultiplier : 1);\r\n\r\n          // Horizontal movement\r\n          let dx = 0;\r\n          if (keysPressed.current.has(controls[1])) dx -= base; // Left\r\n          if (keysPressed.current.has(controls[2])) dx += base; // Right\r\n\r\n          // Jumping only if grounded\r\n          let startedJump = false;\r\n          const isJumpPressed = keysPressed.current.has(controls[0]);\r\n\r\n          if (\r\n            jump &&\r\n            isJumpPressed &&\r\n            !jumpPressedLastFrame.current &&\r\n            ((jumpCount && jumpCount > 1 && currentJumps.current < jumpCount) ||\r\n              (jumpCount === 1 && groundedRef.current))\r\n          ) {\r\n            velocityY.current = jumpHeight;\r\n            groundedRef.current = false;\r\n            currentJumps.current += 1;\r\n            startedJump = true;\r\n          }\r\n\r\n          jumpPressedLastFrame.current = isJumpPressed;\r\n\r\n          // Apply gravity\r\n          velocityY.current -= gravity * dt;\r\n\r\n          // --- Horizontal collision check (sweep X) ---\r\n          let candX = prev.x + dx;\r\n          if (dx !== 0 && objects.length) {\r\n            for (const o of objects) {\r\n              if (\r\n                aabbOverlap(candX, prev.y, cw, ch, o.x, o.y, o.width, o.height)\r\n              ) {\r\n                if (dx > 0) candX = o.x - cw; // Hitting wall from left\r\n                else candX = o.x + o.width; // Hitting wall from right\r\n                onAction?.(\"collide\", { with: o }); // Notify collision\r\n              }\r\n            }\r\n          }\r\n\r\n          // --- Vertical collision check (sweep Y) ---\r\n          const vy = velocityY.current;\r\n          let candY = prev.y + vy;\r\n          let landed = false;\r\n\r\n          if (objects.length) {\r\n            for (const o of objects) {\r\n              if (\r\n                aabbOverlap(candX, candY, cw, ch, o.x, o.y, o.width, o.height)\r\n              ) {\r\n                if (vy < 0) {\r\n                  // Falling down → land on top of object\r\n                  candY = o.y + o.height;\r\n                  landed = true;\r\n                  velocityY.current = 0;\r\n                  onAction?.(\"collide\", { with: o });\r\n                } else if (vy > 0) {\r\n                  // Going up → hit underside\r\n                  candY = o.y - ch;\r\n                  velocityY.current = 0;\r\n                  onAction?.(\"collide\", { with: o });\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          // Ground level (y=0)\r\n          if (candY < 0) {\r\n            candY = 0;\r\n            velocityY.current = 0;\r\n            landed = true;\r\n          }\r\n\r\n          if (landed) currentJumps.current = 0;\r\n          groundedRef.current = landed;\r\n\r\n          if (groundedRef.current && movingPlatforms?.length) {\r\n            for (const p of movingPlatforms) {\r\n              const isOnPlatform =\r\n                candX + cw > p.x &&\r\n                candX < p.x + p.width &&\r\n                Math.abs(candY - (p.y + p.height)) < 2;\r\n\r\n              if (isOnPlatform) {\r\n                if (p.deltaX) candX += p.deltaX;\r\n                if (p.deltaY) candY += p.deltaY;\r\n              }\r\n            }\r\n          }\r\n\r\n          // Facing direction\r\n          if (dx < 0) setFacing(-1);\r\n          else if (dx > 0) setFacing(1);\r\n\r\n          // Select action state\r\n          let nextAction = \"idle\";\r\n          if (startedJump) nextAction = \"jump\";\r\n          else if (!groundedRef.current) nextAction = \"inair\";\r\n          else if (dx !== 0)\r\n            nextAction = isSprint\r\n              ? dx > 0\r\n                ? \"sprintRight\"\r\n                : \"sprintLeft\"\r\n              : dx > 0\r\n              ? \"walkRight\"\r\n              : \"walkLeft\";\r\n\r\n          setAction(nextAction);\r\n\r\n          return { x: candX, y: candY };\r\n        });\r\n      }\r\n\r\n      raf = requestAnimationFrame(loop);\r\n    };\r\n\r\n    raf = requestAnimationFrame(loop);\r\n    return () => cancelAnimationFrame(raf);\r\n  }, [controls, sprint, sprintMultiplier, speed, jump, gravity, lockControls]);\r\n\r\n  return (\r\n    <div\r\n      ref={setRefs}\r\n      {...rest}\r\n      style={{\r\n        transform: `translate3d(${pos.x}px, ${-pos.y}px, 0) scaleX(${facing})`,\r\n        willChange: \"transform\",\r\n        display: \"inline-block\",\r\n        width: \"auto\",\r\n        ...(rest.style || {}),\r\n      }}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n});\r\n\r\nexport default Character;","export const basicGravity = 9.8;\r\nexport const basicJumpHeight = 9; // in pixels","import { type ReactNode } from \"react\";\r\nimport \"./globals.css\"\r\n\r\ninterface canvasProps {\r\n  children: ReactNode;\r\n  [key: string]: any;\r\n}\r\n\r\nexport default function Canvas(props: canvasProps) {\r\n  return (\r\n    <div id=\"canvas\" {...props}>\r\n      {props.children}\r\n    </div>\r\n  );\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, type RefObject, type ReactNode } from \"react\";\r\n\r\ninterface CameraProps {\r\n  children: ReactNode;\r\n  parentRef: RefObject<any>;\r\n  characterRef: RefObject<any>;\r\n}\r\n\r\nexport default function Camera({\r\n  children,\r\n  parentRef,\r\n  characterRef,\r\n}: CameraProps) {\r\n  useEffect(() => {\r\n    let frame: number;\r\n\r\n    const track = () => {\r\n      const parent = parentRef.current;\r\n      const character = characterRef.current;\r\n      if (!parent || !character) return;\r\n\r\n      const parentRect = parent.getBoundingClientRect();\r\n      const charRect = character.getBoundingClientRect();\r\n\r\n      // Get the character's absolute position within the canvas\r\n      const charX = charRect.left - parentRect.left + parent.scrollLeft;\r\n      const charY = charRect.top - parentRect.top + parent.scrollTop;\r\n\r\n      // Center the character on the screen\r\n      const targetScrollLeft = charX - parent.clientWidth / 2;\r\n      const targetScrollTop = charY - parent.clientHeight / 2;\r\n\r\n      // Prevent scrolling beyond boundaries\r\n      parent.scrollLeft = Math.max(\r\n        0,\r\n        Math.min(parent.scrollWidth - parent.clientWidth, targetScrollLeft)\r\n      );\r\n      parent.scrollTop = Math.max(\r\n        0,\r\n        Math.min(parent.scrollHeight - parent.clientHeight, targetScrollTop)\r\n      );\r\n\r\n      frame = requestAnimationFrame(track);\r\n    };\r\n\r\n    frame = requestAnimationFrame(track);\r\n    return () => cancelAnimationFrame(frame);\r\n  }, [parentRef, characterRef]);\r\n\r\n  return <>{children}</>;\r\n}\r\n","\"use client\";\r\n\r\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\r\n\r\nexport interface GameObjectProps {\r\n  id: string;\r\n  x: number;\r\n  y: number;\r\n  gravity?: boolean;\r\n  children: ReactNode;\r\n  [key: string]: any; // For additional props like ref\r\n}\r\n\r\nexport default function GameObject({\r\n  id,\r\n  x: initialX,\r\n  y: initialY,\r\n  gravity = false,\r\n  children,\r\n  ...props\r\n}: GameObjectProps) {\r\n  const [position, setPosition] = useState({ x: initialX, y: initialY });\r\n  const velocityY = useRef(0);\r\n  const delta = 1 / 60;\r\n\r\n  useEffect(() => {\r\n    if (!gravity) return;\r\n\r\n    let frame: number;\r\n    const loop = () => {\r\n      velocityY.current -= 9.8 * delta;\r\n      setPosition((prev) => {\r\n        let newY = prev.y + velocityY.current;\r\n        if (newY < 0) {\r\n          newY = 0;\r\n          velocityY.current = 0;\r\n        }\r\n        return { ...prev, y: newY };\r\n      });\r\n      frame = requestAnimationFrame(loop);\r\n    };\r\n    frame = requestAnimationFrame(loop);\r\n    return () => cancelAnimationFrame(frame);\r\n  }, [gravity]);\r\n\r\n  useEffect(() => {\r\n    setPosition({ x: initialX, y: initialY });\r\n  }, [initialX, initialY]);\r\n\r\n  return (\r\n    <div\r\n      {...props}\r\n      data-id={id}\r\n      style={{\r\n        position: \"absolute\",\r\n        left: position.x,\r\n        bottom: position.y,\r\n        ...props.style,\r\n      }}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n"],"mappings":"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","names":["Character","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}