UNPKG

hytopia

Version:

The HYTOPIA SDK makes it easy for developers to create massively multiplayer games using JavaScript or TypeScript.

47 lines (39 loc) 1.36 kB
import { Quaternion, Vector3Like, QuaternionLike } from 'hytopia'; import GunEntity from '../GunEntity'; import type { GunEntityOptions } from '../GunEntity'; const DEFAULT_BOLT_ACTION_SNIPER_OPTIONS: GunEntityOptions = { ammo: 1, damage: 75, fireRate: 0.5, heldHand: 'both', iconImageUri: 'icons/bolt-action-sniper.png', idleAnimation: 'idle_gun_both', mlAnimation: 'shoot_gun_both', name: 'Bolt Action Sniper', maxAmmo: 1, totalAmmo: 12, scopeZoom: 5, modelUri: 'models/items/bolt-action-sniper.glb', modelScale: 1.3, range: 100, reloadAudioUri: 'audio/sfx/sniper-reload.mp3', reloadTimeMs: 2200, shootAudioUri: 'audio/sfx/sniper-shoot.mp3', }; export default class BoltActionSniperEntity extends GunEntity { public constructor(options: Partial<GunEntityOptions> = {}) { super({ ...DEFAULT_BOLT_ACTION_SNIPER_OPTIONS, ...options }); } public override shoot(): void { if (!this.parent || !this.processShoot()) return; super.shoot(); // It's bolt action, auto reload it 300ms after a shot. setTimeout(() => { this.reload() }, 300); } public override getMuzzleFlashPositionRotation(): { position: Vector3Like, rotation: QuaternionLike } { return { // TODO: FIX MUZZLE FLASH POSITION position: { x: 0, y: 0.01, z: -1.25 }, rotation: Quaternion.fromEuler(0, 90, 0), }; } }