@plasius/renderer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CODE_OF_CONDUCT.md +79 -0
  3. package/CONTRIBUTORS.md +27 -0
  4. package/LICENSE +203 -0
  5. package/README.md +70 -0
  6. package/SECURITY.md +17 -0
  7. package/dist/adaptivedpr.d.ts +2 -0
  8. package/dist/adaptivedpr.d.ts.map +1 -0
  9. package/dist/adaptivedpr.js +65 -0
  10. package/dist/camera/cameraRigProfile.d.ts +12 -0
  11. package/dist/camera/cameraRigProfile.d.ts.map +1 -0
  12. package/dist/camera/cameraRigProfile.js +18 -0
  13. package/dist/camera/managedCameraController.d.ts +49 -0
  14. package/dist/camera/managedCameraController.d.ts.map +1 -0
  15. package/dist/camera/managedCameraController.js +271 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +3 -0
  19. package/dist/landscape.d.ts +2 -0
  20. package/dist/landscape.d.ts.map +1 -0
  21. package/dist/landscape.js +120 -0
  22. package/dist/player/player.d.ts +8 -0
  23. package/dist/player/player.d.ts.map +1 -0
  24. package/dist/player/player.js +203 -0
  25. package/dist/player/playerstore.d.ts +205 -0
  26. package/dist/player/playerstore.d.ts.map +1 -0
  27. package/dist/player/playerstore.js +500 -0
  28. package/dist/renderStateProvider.d.ts +57 -0
  29. package/dist/renderStateProvider.d.ts.map +1 -0
  30. package/dist/renderStateProvider.js +50 -0
  31. package/dist/renderer.d.ts +9 -0
  32. package/dist/renderer.d.ts.map +1 -0
  33. package/dist/renderer.js +165 -0
  34. package/dist/scene.d.ts +7 -0
  35. package/dist/scene.d.ts.map +1 -0
  36. package/dist/scene.js +10 -0
  37. package/dist/shaders/fragment/landscapeFragmentShader.js +141 -0
  38. package/dist/shaders/landscapeShader.d.ts +13 -0
  39. package/dist/shaders/landscapeShader.d.ts.map +1 -0
  40. package/dist/shaders/landscapeShader.js +25 -0
  41. package/dist/shaders/vertex/landscapeVertexShader.js +67 -0
  42. package/dist/styles/renderer.module.css +90 -0
  43. package/dist/worldSpaceCompositor.d.ts +50 -0
  44. package/dist/worldSpaceCompositor.d.ts.map +1 -0
  45. package/dist/worldSpaceCompositor.js +159 -0
  46. package/dist/xr/rendererXrBridge.d.ts +12 -0
  47. package/dist/xr/rendererXrBridge.d.ts.map +1 -0
  48. package/dist/xr/rendererXrBridge.js +17 -0
  49. package/docs/adrs/adr-0001-renderer-package-scope.md +21 -0
  50. package/docs/adrs/adr-0002-public-repo-governance.md +24 -0
  51. package/docs/adrs/adr-0003-world-space-compositor-contracts.md +34 -0
  52. package/docs/adrs/adr-template.md +35 -0
  53. package/docs/design/0001-public-package-scope.md +18 -0
  54. package/docs/tdrs/index.md +3 -0
  55. package/docs/tdrs/tdr-0001-renderer-public-package-standards-alignment.md +19 -0
  56. package/legal/CLA-REGISTRY.csv +1 -0
  57. package/legal/CLA.md +22 -0
  58. package/legal/CORPORATE_CLA.md +57 -0
  59. package/legal/INDIVIDUAL_CLA.md +91 -0
  60. package/package.json +117 -0
  61. package/src/adaptivedpr.tsx +74 -0
  62. package/src/camera/cameraRigProfile.ts +29 -0
  63. package/src/camera/managedCameraController.tsx +401 -0
  64. package/src/global.d.ts +10 -0
  65. package/src/index.ts +3 -0
  66. package/src/landscape.tsx +321 -0
  67. package/src/player/player.tsx +257 -0
  68. package/src/player/playerstore.tsx +733 -0
  69. package/src/renderStateProvider.tsx +121 -0
  70. package/src/renderer.tsx +294 -0
  71. package/src/scene.tsx +42 -0
  72. package/src/shaders/fragment/landscapeFragmentShader.d.ts +4 -0
  73. package/src/shaders/fragment/landscapeFragmentShader.js +141 -0
  74. package/src/shaders/landscapeShader.tsx +39 -0
  75. package/src/shaders/vertex/landscapeVertexShader.d.ts +4 -0
  76. package/src/shaders/vertex/landscapeVertexShader.js +67 -0
  77. package/src/styles/renderer.module.css +90 -0
  78. package/src/worldSpaceCompositor.ts +265 -0
  79. package/src/xr/rendererXrBridge.ts +44 -0
@@ -0,0 +1,205 @@
1
+ import { createScopedStoreContext } from "@plasius/react-state";
2
+ /**
3
+ * PlayerStore — React Scoped Store for player state (position, stats, inventory, equipment, skills, effects)
4
+ * No external deps. Strongly typed. Designed to be colocated with the renderer/game.
5
+ */
6
+ export interface Vec3 {
7
+ x: number;
8
+ y: number;
9
+ z: number;
10
+ }
11
+ export type AttributeKey = "strength" | "dexterity" | "endurance" | "intellect" | "willpower" | "creativity" | "spirit" | "wisdom" | "charisma";
12
+ export interface PhysicalAttributes {
13
+ strength: number;
14
+ dexterity: number;
15
+ endurance: number;
16
+ }
17
+ export interface MentalAttributes {
18
+ intellect: number;
19
+ willpower: number;
20
+ creativity: number;
21
+ }
22
+ export interface SpiritualAttributes {
23
+ spirit: number;
24
+ wisdom: number;
25
+ charisma: number;
26
+ }
27
+ export interface AttributesBase {
28
+ physical: PhysicalAttributes;
29
+ mental: MentalAttributes;
30
+ spiritual: SpiritualAttributes;
31
+ }
32
+ export interface AttributesFlat {
33
+ strength: number;
34
+ dexterity: number;
35
+ endurance: number;
36
+ intellect: number;
37
+ willpower: number;
38
+ creativity: number;
39
+ spirit: number;
40
+ wisdom: number;
41
+ charisma: number;
42
+ }
43
+ export interface Resources {
44
+ health: number;
45
+ healthMax: number;
46
+ energy: number;
47
+ energyMax: number;
48
+ }
49
+ export interface Item {
50
+ id: string;
51
+ name: string;
52
+ kind: "consumable" | "weapon" | "armor" | "trinket" | "material" | "quest" | "misc";
53
+ weight?: number;
54
+ stackable?: boolean;
55
+ maxStack?: number;
56
+ tags?: string[];
57
+ modifiers?: Partial<Record<AttributeKey, number>>;
58
+ }
59
+ export interface InventorySlot {
60
+ itemId: string;
61
+ qty: number;
62
+ }
63
+ export type EquipmentSlot = "head" | "chest" | "legs" | "hands" | "feet" | "weapon" | "offhand" | "back" | "ring1" | "ring2" | "amulet";
64
+ export type Equipment = Partial<Record<EquipmentSlot, string>>;
65
+ export interface Skill {
66
+ id: string;
67
+ name: string;
68
+ level: number;
69
+ active?: boolean;
70
+ source?: "innate" | "taught" | "researched";
71
+ tags?: string[];
72
+ cooldownMs?: number;
73
+ resourceCost?: number;
74
+ }
75
+ export interface StatusEffectModifier {
76
+ attributes?: Partial<Record<AttributeKey, number>>;
77
+ resources?: Partial<Pick<Resources, "healthMax" | "energyMax">>;
78
+ moveSpeedMult?: number;
79
+ damageMult?: number;
80
+ }
81
+ export interface StatusEffect {
82
+ id: string;
83
+ name: string;
84
+ appliedAt: number;
85
+ durationMs: number;
86
+ modifiers?: StatusEffectModifier;
87
+ }
88
+ export interface PlayerState {
89
+ position: Vec3;
90
+ lookAt: Vec3;
91
+ velocity: Vec3;
92
+ attributesBase: AttributesBase;
93
+ attributesGear: AttributesFlat;
94
+ attributesEffects: AttributesFlat;
95
+ resources: Resources;
96
+ lastActiveAt?: number;
97
+ items: Record<string, Item>;
98
+ inventory: InventorySlot[];
99
+ inventoryCapacity: number;
100
+ equipment: Equipment;
101
+ skills: Record<string, Skill>;
102
+ effects: Record<string, StatusEffect>;
103
+ }
104
+ export declare const defaultAttributesBase: AttributesBase;
105
+ export declare const zeroFlat: AttributesFlat;
106
+ export declare const defaultState: PlayerState;
107
+ export type PlayerAction = {
108
+ type: "set_position";
109
+ payload: Vec3;
110
+ } | {
111
+ type: "set_look_at";
112
+ payload: Vec3;
113
+ } | {
114
+ type: "set_velocity";
115
+ payload: Vec3;
116
+ } | {
117
+ type: "learn_skill";
118
+ payload: Skill;
119
+ } | {
120
+ type: "set_skill_active";
121
+ payload: {
122
+ id: string;
123
+ active: boolean;
124
+ };
125
+ } | {
126
+ type: "set_skill_level";
127
+ payload: {
128
+ id: string;
129
+ level: number;
130
+ };
131
+ } | {
132
+ type: "forget_skill";
133
+ payload: {
134
+ id: string;
135
+ };
136
+ } | {
137
+ type: "apply_effect";
138
+ payload: StatusEffect;
139
+ } | {
140
+ type: "remove_effect";
141
+ payload: {
142
+ id: string;
143
+ };
144
+ } | {
145
+ type: "register_item";
146
+ payload: Item;
147
+ } | {
148
+ type: "add_item";
149
+ payload: {
150
+ itemId: string;
151
+ qty: number;
152
+ };
153
+ } | {
154
+ type: "remove_item";
155
+ payload: {
156
+ itemId: string;
157
+ qty: number;
158
+ };
159
+ } | {
160
+ type: "equip";
161
+ payload: {
162
+ slot: EquipmentSlot;
163
+ itemId: string;
164
+ };
165
+ } | {
166
+ type: "unequip";
167
+ payload: {
168
+ slot: EquipmentSlot;
169
+ };
170
+ } | {
171
+ type: "set_resource";
172
+ payload: Partial<Resources>;
173
+ } | {
174
+ type: "set_attributes_base";
175
+ payload: Partial<Record<AttributeKey, number>>;
176
+ } | {
177
+ type: "set_attributes_gear";
178
+ payload: Partial<Record<AttributeKey, number>>;
179
+ } | {
180
+ type: "set_attributes_effects";
181
+ payload: Partial<Record<AttributeKey, number>>;
182
+ };
183
+ export type PlayerStoreContext = ReturnType<typeof createScopedStoreContext<PlayerState, PlayerAction>>;
184
+ export declare const PlayerStore: PlayerStoreContext;
185
+ export declare const PlayerActions: {
186
+ readonly setPosition: (payload: Vec3) => PlayerAction;
187
+ readonly setLookAt: (payload: Vec3) => PlayerAction;
188
+ readonly setVelocity: (payload: Vec3) => PlayerAction;
189
+ readonly setResource: (payload: Partial<Resources>) => PlayerAction;
190
+ readonly setAttributesBase: (payload: Partial<Record<AttributeKey, number>>) => PlayerAction;
191
+ readonly setAttributesGear: (payload: Partial<Record<AttributeKey, number>>) => PlayerAction;
192
+ readonly setAttributesEffects: (payload: Partial<Record<AttributeKey, number>>) => PlayerAction;
193
+ readonly registerItem: (payload: Item) => PlayerAction;
194
+ readonly addItem: (itemId: string, qty: number) => PlayerAction;
195
+ readonly removeItem: (itemId: string, qty: number) => PlayerAction;
196
+ readonly equip: (slot: EquipmentSlot, itemId: string) => PlayerAction;
197
+ readonly unequip: (slot: EquipmentSlot) => PlayerAction;
198
+ readonly learnSkill: (payload: Skill) => PlayerAction;
199
+ readonly setSkillActive: (id: string, active: boolean) => PlayerAction;
200
+ readonly setSkillLevel: (id: string, level: number) => PlayerAction;
201
+ readonly forgetSkill: (id: string) => PlayerAction;
202
+ readonly applyEffect: (payload: StatusEffect) => PlayerAction;
203
+ readonly removeEffect: (id: string) => PlayerAction;
204
+ };
205
+ //# sourceMappingURL=playerstore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playerstore.d.ts","sourceRoot":"","sources":["../../src/player/playerstore.tsx"],"names":[],"mappings":"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"}