hytopia 0.3.11 → 0.3.13

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 (44) hide show
  1. package/docs/server.baseentityoptions.controller.md +13 -0
  2. package/docs/server.baseentityoptions.md +190 -0
  3. package/docs/server.baseentityoptions.name.md +13 -0
  4. package/docs/{server.entityoptions.opacity.md → server.baseentityoptions.opacity.md} +2 -2
  5. package/docs/{server.entityoptions.parent.md → server.baseentityoptions.parent.md} +2 -2
  6. package/docs/{server.entityoptions.parentnodename.md → server.baseentityoptions.parentnodename.md} +2 -2
  7. package/docs/server.baseentityoptions.rigidbodyoptions.md +13 -0
  8. package/docs/{server.entityoptions.tag.md → server.baseentityoptions.tag.md} +2 -2
  9. package/docs/server.baseentityoptions.tintcolor.md +13 -0
  10. package/docs/{server.entityoptions.blockhalfextents.md → server.blockentityoptions.blockhalfextents.md} +2 -2
  11. package/docs/{server.entityoptions.blocktextureuri.md → server.blockentityoptions.blocktextureuri.md} +2 -2
  12. package/docs/server.blockentityoptions.md +77 -0
  13. package/docs/server.entityoptions.md +4 -312
  14. package/docs/server.md +52 -19
  15. package/docs/server.modelentityoptions.md +134 -0
  16. package/docs/server.modelentityoptions.modelanimationsplaybackrate.md +13 -0
  17. package/docs/server.modelentityoptions.modelhiddennodes.md +13 -0
  18. package/docs/server.modelentityoptions.modelloopedanimations.md +13 -0
  19. package/docs/server.modelentityoptions.modelscale.md +13 -0
  20. package/docs/server.modelentityoptions.modeluri.md +13 -0
  21. package/docs/server.playerentityoptions.md +5 -46
  22. package/docs/server.playerui.lockpointer.md +1 -1
  23. package/docs/server.playerui.md +1 -1
  24. package/examples/entity-spawn/index.ts +4 -3
  25. package/examples/hygrounds/classes/ChestEntity.ts +2 -2
  26. package/examples/hygrounds/classes/GunEntity.ts +3 -3
  27. package/examples/hygrounds/classes/ItemEntity.ts +13 -9
  28. package/examples/hygrounds/classes/MeleeWeaponEntity.ts +3 -3
  29. package/examples/zombies-fps/classes/EnemyEntity.ts +2 -2
  30. package/examples/zombies-fps/classes/GunEntity.ts +3 -3
  31. package/package.json +1 -1
  32. package/server.api.json +614 -534
  33. package/server.d.ts +51 -36
  34. package/server.js +1 -1
  35. package/docs/server.entityoptions.controller.md +0 -13
  36. package/docs/server.entityoptions.modelanimationsplaybackrate.md +0 -13
  37. package/docs/server.entityoptions.modelhiddennodes.md +0 -13
  38. package/docs/server.entityoptions.modelloopedanimations.md +0 -13
  39. package/docs/server.entityoptions.modelscale.md +0 -13
  40. package/docs/server.entityoptions.modeluri.md +0 -13
  41. package/docs/server.entityoptions.name.md +0 -13
  42. package/docs/server.entityoptions.rigidbodyoptions.md +0 -13
  43. package/docs/server.entityoptions.tintcolor.md +0 -13
  44. package/docs/server.playerentityoptions.player.md +0 -13
@@ -2,57 +2,16 @@
2
2
 
3
3
  [Home](./index.md) > [server](./server.md) > [PlayerEntityOptions](./server.playerentityoptions.md)
4
4
 
5
- ## PlayerEntityOptions interface
5
+ ## PlayerEntityOptions type
6
6
 
7
7
  Options for creating a PlayerEntity instance.
8
8
 
9
9
  **Signature:**
10
10
 
11
11
  ```typescript
12
- export interface PlayerEntityOptions extends EntityOptions
12
+ export type PlayerEntityOptions = {
13
+ player: Player;
14
+ } & EntityOptions;
13
15
  ```
14
- **Extends:** [EntityOptions](./server.entityoptions.md)
16
+ **References:** [Player](./server.player.md)<!-- -->, [EntityOptions](./server.entityoptions.md)
15
17
 
16
- ## Properties
17
-
18
- <table><thead><tr><th>
19
-
20
- Property
21
-
22
-
23
- </th><th>
24
-
25
- Modifiers
26
-
27
-
28
- </th><th>
29
-
30
- Type
31
-
32
-
33
- </th><th>
34
-
35
- Description
36
-
37
-
38
- </th></tr></thead>
39
- <tbody><tr><td>
40
-
41
- [player](./server.playerentityoptions.player.md)
42
-
43
-
44
- </td><td>
45
-
46
-
47
- </td><td>
48
-
49
- [Player](./server.player.md)
50
-
51
-
52
- </td><td>
53
-
54
- The player the player entity is assigned to.
55
-
56
-
57
- </td></tr>
58
- </tbody></table>
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## PlayerUI.lockPointer() method
6
6
 
7
- Locks or unlocks the player's mouse pointer.
7
+ Locks or unlocks the player's mouse pointer. If the pointer is unlocked with lockPointer(false), the player will not be able to use in-game inputs or camera controls from the mouse pointer until `player.ui.lockPointer(true)`<!-- -->, or in your game's client UI html with `hytopia.lockPointer(true)`<!-- -->.
8
8
 
9
9
  **Signature:**
10
10
 
@@ -111,7 +111,7 @@ Loads client UI for the player.
111
111
 
112
112
  </td><td>
113
113
 
114
- Locks or unlocks the player's mouse pointer.
114
+ Locks or unlocks the player's mouse pointer. If the pointer is unlocked with lockPointer(false), the player will not be able to use in-game inputs or camera controls from the mouse pointer until `player.ui.lockPointer(true)`<!-- -->, or in your game's client UI html with `hytopia.lockPointer(true)`<!-- -->.
115
115
 
116
116
 
117
117
  </td></tr>
@@ -1,5 +1,7 @@
1
1
  import {
2
2
  startServer,
3
+ BlockType,
4
+ Collider,
3
5
  ColliderShape,
4
6
  Entity,
5
7
  EntityEvent,
@@ -7,7 +9,6 @@ import {
7
9
  PlayerEvent,
8
10
  RigidBodyType,
9
11
  World,
10
- Collider,
11
12
  } from 'hytopia';
12
13
 
13
14
  import worldMap from './assets/map.json';
@@ -41,8 +42,8 @@ startServer(world => {
41
42
  radius: 9,
42
43
  isSensor: true, // Sensors are colliders that do not react with physics, but can still trigger collision events.
43
44
  tag: 'aggro-sensor',
44
- onCollision: (otherEntity, started) => {
45
- console.log('spider aggro-sensor colliding with', otherEntity.name, started);
45
+ onCollision: (other: Entity | BlockType, started: boolean) => {
46
+ console.log('spider aggro-sensor colliding with', other.name, started);
46
47
  },
47
48
  },
48
49
  ],
@@ -3,7 +3,7 @@ import {
3
3
  BallColliderOptions,
4
4
  Collider,
5
5
  Entity,
6
- EntityOptions,
6
+ ModelEntityOptions,
7
7
  QuaternionLike,
8
8
  SceneUI,
9
9
  Vector3Like,
@@ -18,7 +18,7 @@ export default class ChestEntity extends Entity {
18
18
  private _openAudio: Audio;
19
19
  private _opened: boolean = false;
20
20
 
21
- public constructor(options: EntityOptions = {}) {
21
+ public constructor(options: Partial<ModelEntityOptions> = {}) {
22
22
  super({
23
23
  modelUri: 'models/environment/chest.gltf',
24
24
  modelScale: 1,
@@ -14,7 +14,7 @@ import type { ItemEntityOptions } from './ItemEntity';
14
14
 
15
15
  export type GunHand = 'left' | 'right' | 'both';
16
16
 
17
- export interface GunEntityOptions extends ItemEntityOptions {
17
+ export type GunEntityOptions = {
18
18
  ammo: number; // The amount of ammo in the clip.
19
19
  damage: number; // The damage of the gun.
20
20
  fireRate: number; // Bullets shot per second.
@@ -25,7 +25,7 @@ export interface GunEntityOptions extends ItemEntityOptions {
25
25
  reloadTimeMs: number; // Seconds to reload.
26
26
  shootAudioUri: string; // The audio played when shooting
27
27
  scopeZoom?: number; // The zoom level when scoped in.
28
- }
28
+ } & ItemEntityOptions;
29
29
 
30
30
  export default abstract class GunEntity extends ItemEntity {
31
31
  protected readonly damage: number;
@@ -44,7 +44,7 @@ export default abstract class GunEntity extends ItemEntity {
44
44
  private _shootAudio: Audio;
45
45
 
46
46
  public constructor(options: GunEntityOptions) {
47
- if (!options.modelUri) {
47
+ if (!('modelUri' in options)) {
48
48
  throw new Error('GunEntity requires modelUri');
49
49
  }
50
50
 
@@ -4,11 +4,14 @@ import {
4
4
  CollisionGroup,
5
5
  Entity,
6
6
  EntityOptions,
7
+ BlockEntityOptions,
8
+ ModelEntityOptions,
7
9
  PlayerEntityController,
8
10
  QuaternionLike,
9
11
  SceneUI,
10
12
  Vector3Like,
11
13
  World,
14
+ ErrorHandler,
12
15
  } from 'hytopia';
13
16
 
14
17
  import GamePlayerEntity from './GamePlayerEntity';
@@ -18,7 +21,7 @@ const INVENTORIED_POSITION = { x: 0, y: -300, z: 0 };
18
21
 
19
22
  export type HeldHand = 'left' | 'right' | 'both';
20
23
 
21
- export interface ItemEntityOptions extends EntityOptions {
24
+ export type ItemEntityOptions = {
22
25
  heldHand: HeldHand; // The hand the item is held in.
23
26
  iconImageUri: string; // The image uri of the weapon icon.
24
27
  idleAnimation: string; // The animation played when the player holding it is idle.
@@ -27,7 +30,7 @@ export interface ItemEntityOptions extends EntityOptions {
27
30
  consumable?: boolean;
28
31
  consumeAudioUri?: string;
29
32
  consumeTimeMs?: number;
30
- }
33
+ } & EntityOptions;
31
34
 
32
35
  export default class ItemEntity extends Entity {
33
36
  public readonly consumable: boolean;
@@ -42,19 +45,20 @@ export default class ItemEntity extends Entity {
42
45
  private readonly _labelSceneUI: SceneUI;
43
46
 
44
47
  public constructor(options: ItemEntityOptions) {
45
- if (!options.modelUri && !options.blockHalfExtents) {
46
- throw new Error('ItemEntity requires either modelUri or blockHalfExtents');
47
- }
48
-
49
- const colliderOptions = options.modelUri
48
+ const colliderOptions = 'modelUri' in options && options.modelUri
50
49
  ? Collider.optionsFromModelUri(options.modelUri)
51
- : Collider.optionsFromBlockHalfExtents(options.blockHalfExtents!);
50
+ : 'blockHalfExtents' in options && options.blockHalfExtents
51
+ ? Collider.optionsFromBlockHalfExtents(options.blockHalfExtents)
52
+ : undefined;
52
53
 
54
+ if (!colliderOptions) {
55
+ ErrorHandler.fatalError('ItemEntity.constructor(): Item must be a model or block entity!');
56
+ }
53
57
 
54
58
  super({
55
59
  ...options,
56
60
  parentNodeName: ItemEntity._getHandAnchorNode(options.heldHand),
57
- rigidBodyOptions: ItemEntity._createRigidBodyOptions(colliderOptions, options.modelScale ?? 1),
61
+ rigidBodyOptions: ItemEntity._createRigidBodyOptions(colliderOptions, 'modelScale' in options ? options.modelScale ?? 1 : 1),
58
62
  });
59
63
 
60
64
  this.consumable = options.consumable ?? false;
@@ -11,14 +11,14 @@ import ItemEntity from './ItemEntity';
11
11
  import TerrainDamageManager from './TerrainDamageManager';
12
12
  import type { ItemEntityOptions } from './ItemEntity';
13
13
 
14
- export interface MeleeWeaponEntityOptions extends ItemEntityOptions {
14
+ export type MeleeWeaponEntityOptions = {
15
15
  damage: number; // The damage dealt by the weapon
16
16
  attackRate: number; // Attacks per second
17
17
  range: number; // The range of the melee attack
18
18
  attackAudioUri: string; // The audio played when attacking
19
19
  hitAudioUri: string; // The audio played when hitting an entity or block
20
- minesMaterials: boolean; // Whether the weapon mines materials when it hits a block
21
- }
20
+ minesMaterials: boolean; // Whether the weapon mines materials when it hits a block
21
+ } & ItemEntityOptions;
22
22
 
23
23
  export default abstract class MeleeWeaponEntity extends ItemEntity {
24
24
  protected readonly damage: number;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Audio,
3
3
  Entity,
4
- EntityOptions,
5
4
  EntityEvent,
6
5
  EventPayloads,
6
+ ModelEntityOptions,
7
7
  PathfindingEntityController,
8
8
  } from 'hytopia';
9
9
 
@@ -14,7 +14,7 @@ import GamePlayerEntity from './GamePlayerEntity';
14
14
  const RETARGET_ACCUMULATOR_THRESHOLD_MS = 5000;
15
15
  const PATHFIND_ACCUMULATOR_THRESHOLD_MS = 3000;
16
16
 
17
- export interface EnemyEntityOptions extends EntityOptions {
17
+ export interface EnemyEntityOptions extends ModelEntityOptions {
18
18
  damage: number;
19
19
  damageAudioUri?: string;
20
20
  health: number;
@@ -3,12 +3,12 @@ import {
3
3
  CollisionGroup,
4
4
  CollisionGroupsBuilder,
5
5
  Entity,
6
- EntityOptions,
7
6
  PlayerEntity,
8
7
  Vector3Like,
9
8
  QuaternionLike,
10
9
  World,
11
10
  PlayerEntityController,
11
+ ModelEntityOptions,
12
12
  } from 'hytopia';
13
13
 
14
14
  import EnemyEntity from './EnemyEntity';
@@ -16,7 +16,7 @@ import type GamePlayerEntity from './GamePlayerEntity';
16
16
 
17
17
  export type GunHand = 'left' | 'right' | 'both';
18
18
 
19
- export interface GunEntityOptions extends EntityOptions {
19
+ export type GunEntityOptions = {
20
20
  ammo: number; // The amount of ammo in the clip.
21
21
  damage: number; // The damage of the gun.
22
22
  fireRate: number; // Bullets shot per second.
@@ -30,7 +30,7 @@ export interface GunEntityOptions extends EntityOptions {
30
30
  reloadTimeMs: number; // Seconds to reload.
31
31
  shootAnimation: string; // The animation played when the gun is shooting.
32
32
  shootAudioUri: string; // The audio played when shooting
33
- }
33
+ } & ModelEntityOptions;
34
34
 
35
35
  export default abstract class GunEntity extends Entity {
36
36
  public ammo: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hytopia",
3
- "version": "0.3.11",
3
+ "version": "0.3.13",
4
4
  "description": "The HYTOPIA SDK makes it easy for developers to create massively multiplayer games using JavaScript or TypeScript.",
5
5
  "main": "server.js",
6
6
  "bin": {