Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Commit

Permalink
Fix merge conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
0xMugen committed Jul 5, 2024
2 parents 2849c95 + c1a5d73 commit d9d445c
Show file tree
Hide file tree
Showing 16 changed files with 11,565 additions and 2,227 deletions.
13,217 changes: 11,034 additions & 2,183 deletions package-lock.json

Large diffs are not rendered by default.

18 changes: 10 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"format": "prettier --write ."
"dev": "vite dev",
"format": "prettier --write .",
"prepare": "svelte-kit sync",
"preview": "vite preview"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
Expand All @@ -18,26 +19,27 @@
"@types/lodash-es": "^4.17.12",
"@types/three": "^0.159.0",
"autoprefixer": "^10.4.19",
"postcss": "^8.4.38",
"postcss": "^8.4.39",
"prettier": "^3.3.2",
"prettier-plugin-svelte": "^3.2.5",
"svelte": "^4.2.18",
"svelte-check": "^3.8.3",
"tailwindcss": "^3.4.3",
"tslib": "^2.6.3",
"typescript": "^5.5.2",
"vite": "^5.0.3"
"vite": "^5.3.2"
},
"type": "module",
"dependencies": {
"@dimforge/rapier3d-compat": "^0.13.1",
"@theatre/core": "^0.7.2",
"@threlte/core": "^7.3.0",
"@threlte/extras": "^8.11.2",
"@threlte/rapier": "^2.0.0",
"@threlte/extras": "^8.11.4",
"@threlte/rapier": "^2.0.1",
"@threlte/theatre": "^2.1.7",
"@topology-foundation/node": "^0.0.15",
"@tweenjs/tween.js": "^23.1.2",
"bits-ui": "^0.21.10",
"bits-ui": "^0.21.11",
"clsx": "^2.1.1",
"cmdk-sv": "^0.0.17",
"lodash-es": "^4.17.21",
Expand Down
11 changes: 5 additions & 6 deletions src/lib/components/App.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,20 @@
import Position from "./ui/position/position.svelte";
import { debugMode } from "$lib/store/player";
import Settings from "./ui/settings.svelte";
import { topologyInit } from "$lib/topology";
import Update from "../topology/Update.svelte";
import SprayWheel from "./ui/sprayWheel.svelte";
import { startSpraySubscription } from "../paint";
let keyboard: any;
let unsubscribe: () => void;
onMount(() => {
onMount(async () => {
unsubscribe = startSpraySubscription();
selectedKeyboard.subscribe((value) => {
keyboard = { value };
});
});
onDestroy(() => {
if (unsubscribe) unsubscribe();
await topologyInit();
});
$: if (keyboard && keyboard.value) {
Expand All @@ -34,7 +33,7 @@
<div class="absolute">
<SprayWheel />
</div>
<Ui />
<Update />

<div>
<div class="absolute z-10 right-0 p-5 bg-white">
Expand Down
13 changes: 10 additions & 3 deletions src/lib/components/Player.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,18 @@
Mesh,
} from "three";
import PointerLockControls from "./PointerLockControls.svelte";
import { paintMode } from "$lib/store/player";
import {
setPlayerPosition,
playerPosition,
addSprayData,
selectedSpray,
} from "$lib/store/player";
import { tweened } from "svelte/motion";
} from "$lib/store/player"; import { tweened } from "svelte/motion";
import { cubicOut } from "svelte/easing";
import { onMount } from "svelte";
import { handlePainting } from "./player/paintLogic";
import { createEventHandlers } from "./player/eventHandler";
import { get } from "svelte/store";
import { width, height } from "$lib/store/wall";
export let position: [x: number, y: number, z: number] = [0, 0, 0];
Expand Down Expand Up @@ -70,7 +72,12 @@
handleMovement(forward, backward, left, right, jump);
handleGrounding();
handleOutOfBounds();
setPlayerPosition(position);
const currentPlayerPosition = get(playerPosition);
setPlayerPosition(
new Vector3(...position),
cam.rotation.clone(),
currentPlayerPosition.state,
);
handleCursor();
});
Expand Down
75 changes: 75 additions & 0 deletions src/lib/components/PlayersRendering.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<script lang="ts">
import { onMount, onDestroy } from "svelte";
import { T, useFrame } from "@threlte/core";
import { PlayerData, players } from "$lib/store/playersData";
import type { PlayerID } from "$lib/store/playersData";
import { addOrUpdatePlayer, removePlayer } from "$lib/store/playersManager";
import { initializePlayerData, startP2PUpdates } from "$lib/store/fakeP2P";
import { Vector3, Euler } from "three";
import Player from "./Player.svelte";
let playerModels: Map<PlayerID, any> = new Map();
let playerArray: PlayerData[] = [];
function createPlayerModel() {
return {
position: new Vector3(),
rotation: new Euler(),
};
}
function updatePlayerState(
model: any,
state: "idle" | "running" | "walking" | "jumping",
): void {
// Do more stuff
}
function updatePlayerModel(player: PlayerData) {
// Find or create the 3D model for the player
let model = playerModels.get(player.id);
if (!model) {
model = createPlayerModel();
playerModels.set(player.id, model);
}
model.position.copy(player.position);
model.rotation.copy(player.rotation);
updatePlayerState(model, player.state);
}
function updatePlayerArray() {
playerArray = Array.from(players.values());
}
useFrame(() => {
players.forEach((player) => updatePlayerModel(player));
updatePlayerArray();
});
onMount(async () => {
// //Sets up the mock data of the users
// await initializePlayerData();
// startP2PUpdates((id, x, y, z, rotationX, rotationY, rotationZ, state) => {
// addOrUpdatePlayer(id, x, y, z, rotationX, rotationY, rotationZ, state);
// updatePlayerArray();
// }, 60); // 60Hz = 16.17
});
onDestroy(() => {
players.clear();
});
</script>

{#if playerArray}
{#each playerArray as player (player.id)}
<T.Group
position={[player.position.x, player.position.y, player.position.z]}
>
<T.Mesh>
<T.SphereGeometry args={[0.5, 32, 32]} position={[0, 1, 0]} />
<T.MeshBasicMaterial color={0x00ff00} />
</T.Mesh>
</T.Group>
{/each}
{/if}
5 changes: 3 additions & 2 deletions src/lib/components/Scene.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import { spring } from "svelte/motion";
import { Mesh, Vector3 } from "three";
import Player from "./Player.svelte";
import PlayersRendering from "./PlayersRendering.svelte";
import SplashWall from "./map/SplashWall.svelte";
import ObstacleObjects from "./map/ObstacleObjects.svelte";
import GenericPlaform from "./map/GenericPlatform.svelte";
Expand Down Expand Up @@ -45,8 +46,6 @@
}
</script>

<Environment path="/hdr/" files="shanghai_riverside_1k.hdr" />

<T.AmbientLight intensity={0.6} />

<T.DirectionalLight castShadow position={[8, 1000, -3]} intensity={1} />
Expand Down Expand Up @@ -102,6 +101,8 @@
</T.Group>
</CollisionGroups>

<PlayersRendering />

<!--55 is top-->
<CollisionGroups groups={[0]}>
<Player position={[0, -3, 25]} />
Expand Down
6 changes: 3 additions & 3 deletions src/lib/components/ui/position/position.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<div>
Player Position:
<p>X: {Math.floor($playerPosition[0])}</p>
<p>Y: {Math.floor($playerPosition[1])}</p>
<p>Z: {Math.floor($playerPosition[2])}</p>
<p>X: {Math.floor($playerPosition.position.x)}</p>
<p>Y: {Math.floor($playerPosition.position.y)}</p>
<p>Z: {Math.floor($playerPosition.position.z)}</p>
</div>
47 changes: 47 additions & 0 deletions src/lib/store/fakeP2P.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { addOrUpdatePlayer, removePlayer } from "./playersManager";
import type { PlayerID } from "./playersData";

export function initializePlayerData() {
for (let i = 0; i < 10; i++) {
const id = `player-${i}` as PlayerID;
const x = Math.random() * 10 - 5;
const y = Math.random() * 10 - 5;
const z = Math.random() * 10 - 5;
const rotationX = Math.random() * Math.PI * 2;
const rotationY = Math.random() * Math.PI * 2;
const rotationZ = Math.random() * Math.PI * 2;
const state = ["idle", "running", "walking", "jumping"][
Math.floor(Math.random() * 3)
] as "idle" | "running" | "walking" | "jumping";
// addOrUpdatePlayer(id, x, y, z, rotationX, rotationY, rotationZ, state);
}
}

export function startP2PUpdates(
callback: (
id: PlayerID,
x: number,
y: number,
z: number,
rotationX: number,
rotationY: number,
rotationZ: number,
state: "idle" | "running" | "walking" | "jumping",
) => void,
interval: number = 1000,
) {
// Simulate P2P updates
setInterval(() => {
const id = `player-${Math.floor(Math.random() * 10)}` as PlayerID;
const x = Math.random() * 10 - 5;
const y = Math.random() * 10 - 5;
const z = Math.random() * 10 - 5;
const rotationX = Math.random() * Math.PI * 2;
const rotationY = Math.random() * Math.PI * 2;
const rotationZ = Math.random() * Math.PI * 2;
const state = ["idle", "running", "walking", "jumping"][
Math.floor(Math.random() * 3)
] as "idle" | "running" | "walking" | "jumping";
callback(id, x, y, z, rotationX, rotationY, rotationZ, state);
}, interval);
}
73 changes: 53 additions & 20 deletions src/lib/store/player.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,70 @@
import { writable } from "svelte/store";
import type { Player } from "$lib/store/playersData";
import { Vector3, Euler } from "three";

export const paintMode = writable<boolean>(false);
// Player-related stores and functions
// -----------------------------------

export const debugMode = writable<boolean>(false);
export const setDebugMode = (value: boolean) => {
debugMode.set(value);
/**
* Represents the player's current position, rotation, and state.
*/
export const playerPosition = writable<Player>({
id: "",
position: new Vector3(0, 10000, 20005),
rotation: new Euler(0, 0, 0, "XYZ"),
state: "idle",
});

/**
* Updates the player's position, rotation, and state.
*
* @param position - The new position as a Vector3 object.
* @param rotation - The new rotation as an Euler object.
* @param state - The new state as a string ("idle", "running", "walking", "jumping").
*/
export const setPlayerPosition = (
position?: Vector3,
rotation?: Euler,
state?: "idle" | "running" | "walking" | "jumping",
) => {
playerPosition.update((player) => ({
...player,
position: position ?? player.position,
rotation: rotation ?? player.rotation,
state: state ?? player.state,
}));
};

// Player state data
// --------------------
export interface Coords {
x: number;
y: number;
}

export type Position = number[];
export const playerPosition = writable<Position>([0, 10000, 20005]);
export const setPlayerPosition = (position: Position) => {
playerPosition.set(position);
};

export const mousePosition = writable<Coords>({ x: 0, y: 0 });
export const isMouseDown = writable<boolean>(false);
export const isIntersect = writable<boolean>(false);

/**
* Player Settings are variable modes
*/
export const paintMode = writable<boolean>(false);
export const debugMode = writable<boolean>(false);
export const canPaint = writable<boolean>(false);
// Sets
export function setCanPaint(value: boolean) {
canPaint.set(value);
}
export const setDebugMode = (value: boolean) => {
debugMode.set(value);
};

/**
* Selected colors and availible colors
*/
export type Color = { r: number; g: number; b: number; a: number };
export const selectedColor = writable<Color>({ r: 255, g: 0, b: 0, a: 255 });

export const palette = writable([
export const palette = writable<Color[]>([
{ r: 255, g: 0, b: 0, a: 255 }, // Red
{ r: 0, g: 255, b: 0, a: 255 }, // Green
{ r: 0, g: 0, b: 255, a: 255 }, // Blue
Expand All @@ -37,12 +76,6 @@ export const palette = writable([
{ r: 255, g: 165, b: 0, a: 255 }, // Orange
{ r: 75, g: 0, b: 130, a: 255 }, // Indigo
]);

export const canPaint = writable(false);
export function setCanPaint(value: boolean) {
canPaint.set(value);
}

export const sprayWheel = writable(false);
export const selectedSpray = writable<number>(0);

Expand All @@ -59,4 +92,4 @@ export const addSprayData = (spray: SprayData) => {
updatedSprays.sort((a, b) => a.timestamp - b.timestamp);
return updatedSprays;
});
};
};
Loading

0 comments on commit d9d445c

Please sign in to comment.