TomatitoToho commited on
Commit
cbc4942
·
verified ·
1 Parent(s): 52e108d

Upload src/stores/playerStore.ts with huggingface_hub

Browse files
Files changed (1) hide show
  1. src/stores/playerStore.ts +69 -0
src/stores/playerStore.ts ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use client'
2
+
3
+ import { create } from 'zustand'
4
+ import type { Player, PlayerInventory } from '@/types'
5
+ import { CREATIVE_BLOCKS } from '@/engine/constants'
6
+
7
+ interface PlayerStore {
8
+ player: Player | null
9
+ initPlayer: () => void
10
+ updatePosition: (pos: [number, number, number]) => void
11
+ updateRotation: (rot: [number, number]) => void
12
+ updateVelocity: (vel: [number, number, number]) => void
13
+ setHealth: (hp: number) => void
14
+ setFood: (food: number) => void
15
+ setGamemode: (mode: Player['gamemode']) => void
16
+ setSelectedSlot: (slot: number) => void
17
+ setSneaking: (v: boolean) => void
18
+ setSprinting: (v: boolean) => void
19
+ setFlying: (v: boolean) => void
20
+ }
21
+
22
+ export const usePlayerStore = create<PlayerStore>((set, get) => ({
23
+ player: null,
24
+ initPlayer: () => {
25
+ const inventory: PlayerInventory = {
26
+ hotbar: Array(9).fill(null),
27
+ main: Array(27).fill(null),
28
+ armor: Array(4).fill(null),
29
+ offhand: null,
30
+ }
31
+ // Fill hotbar with creative blocks
32
+ CREATIVE_BLOCKS.slice(0, 9).forEach((blockId, i) => {
33
+ inventory.hotbar[i] = { id: blockId, count: 64, damage: 0 }
34
+ })
35
+
36
+ set({
37
+ player: {
38
+ id: 'player',
39
+ uuid: crypto.randomUUID(),
40
+ position: [8, 80, 8],
41
+ velocity: [0, 0, 0],
42
+ rotation: [0, 0],
43
+ health: 20,
44
+ maxHealth: 20,
45
+ onGround: false,
46
+ gamemode: 'creative',
47
+ inventory,
48
+ selectedSlot: 0,
49
+ foodLevel: 20,
50
+ saturation: 5,
51
+ experience: 0,
52
+ experienceLevel: 0,
53
+ flying: true,
54
+ sneaking: false,
55
+ sprinting: false,
56
+ }
57
+ })
58
+ },
59
+ updatePosition: (pos) => set(s => s.player ? { player: { ...s.player, position: pos } } : s),
60
+ updateRotation: (rot) => set(s => s.player ? { player: { ...s.player, rotation: rot } } : s),
61
+ updateVelocity: (vel) => set(s => s.player ? { player: { ...s.player, velocity: vel } } : s),
62
+ setHealth: (hp) => set(s => s.player ? { player: { ...s.player, health: Math.max(0, Math.min(s.player.maxHealth, hp)) } } : s),
63
+ setFood: (food) => set(s => s.player ? { player: { ...s.player, foodLevel: Math.max(0, Math.min(20, food)) } } : s),
64
+ setGamemode: (mode) => set(s => s.player ? { player: { ...s.player, gamemode: mode } } : s),
65
+ setSelectedSlot: (slot) => set(s => s.player ? { player: { ...s.player, selectedSlot: slot } } : s),
66
+ setSneaking: (v) => set(s => s.player ? { player: { ...s.player, sneaking: v } } : s),
67
+ setSprinting: (v) => set(s => s.player ? { player: { ...s.player, sprinting: v } } : s),
68
+ setFlying: (v) => set(s => s.player ? { player: { ...s.player, flying: v } } : s),
69
+ }))