Skip to content

Commit

Permalink
add game-area-checker (#14)
Browse files Browse the repository at this point in the history
* add game-area-checker

* fix comment

* add exit spawn point config

* remove unused code

* remove logp
  • Loading branch information
gonpombo8 committed Aug 13, 2024
1 parent 19ca90f commit 8821da3
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 24 deletions.
45 changes: 45 additions & 0 deletions src/environment/game-area-check.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Vector3 } from '@dcl/sdk/math'
import { getSDK } from '../sdk'
import { utilities, queue } from '..'
import { sceneParentEntity } from '../config'
import { rotateVectorAroundCenter } from '../utilities'
import { movePlayerTo } from '~system/RestrictedActions'
import { getQueue, setNextPlayer } from '../queue'

export function gameAreaCheck() {
let areaCheckTimer = 0
return function gameAreaCheck(dt: number) {
const {
engine,
components: { Transform },
config
} = getSDK()
if (!config.gameArea) return
areaCheckTimer += dt

if (areaCheckTimer >= 1) {
areaCheckTimer = 0

const playerTransform = Transform.get(engine.PlayerEntity)

// TODO: center should be a config ?
const center = Vector3.create(8, 0, 8)
const sceneRotation = Transform.get(sceneParentEntity).rotation
const areaPt1 = rotateVectorAroundCenter(config.gameArea.topLeft, center, sceneRotation)
const areaPt2 = rotateVectorAroundCenter(config.gameArea.bottomRight, center, sceneRotation)

// If the player is inside the game-area but its not the active player.
if (utilities.isVectorInsideArea(playerTransform.position, areaPt1, areaPt2)) {
if (!queue.isActive()) {
void movePlayerTo({
newRelativePosition: rotateVectorAroundCenter(config.gameArea.exitSpawnPoint, center, sceneRotation)
})
}
// Active player left game area
// (we put a 2s grace period because the movePlayer takes time)
} else if (queue.isActive() && Date.now() - getQueue()[0]!.player.startPlayingAt > 2000) {
setNextPlayer()
}
}
}
}
16 changes: 0 additions & 16 deletions src/environment/index.ts

This file was deleted.

14 changes: 11 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import { IEngine } from '@dcl/sdk/ecs'
import { IEngine, TransformType } from '@dcl/sdk/ecs'
import type playersType from '@dcl/sdk/players'
import type { syncEntity as SyncEntityType } from '@dcl/sdk/network'

import { startPlayersQueue } from './queue'
import * as gameConfig from './config'
import * as progress from './progress'
import { setSDK } from './sdk'
import { addEnvironment } from './environment'
import { gameAreaCheck } from './environment/game-area-check'

export type IOptions = {
gameId: string
environment: string
gameTimeoutMs?: number
sceneRotation?: number
gameArea?: {
topLeft: TransformType['position']
bottomRight: TransformType['position']
exitSpawnPoint: TransformType['position']
}
}

export let engine: IEngine
Expand All @@ -26,9 +31,12 @@ export function initLibrary(
startPlayersQueue()
gameConfig.init()
void progress.init()

if (options.gameArea) {
engine.addSystem(gameAreaCheck())
}
}

export { addEnvironment }
export * as ui from './ui'
export * as queue from './queue'
export { sceneParentEntity } from './config'
Expand Down
8 changes: 4 additions & 4 deletions src/queue/display/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const frameModel = 'mini-game-assets/models/queueDisplay/workstation_display.glb
let enterScreenShown = false
let initialized = false

export function initQueueDisplay(transform: TransformType) {
export function initQueueDisplay(displayTransform: TransformType) {
if (initialized) return
initialized = true
const {
Expand All @@ -31,10 +31,10 @@ export function initQueueDisplay(transform: TransformType) {
} = getSDK()

currentScreen = SCREENS.addToQueue
positionActive = transform
positionActive = displayTransform
positionDisabled = {
...transform,
position: { ...transform.position, y: transform.position.y - 1 }
...displayTransform,
position: { ...displayTransform.position, y: displayTransform.position.y - 1 }
}
//FRAME
frameEntity = engine.addEntity()
Expand Down
1 change: 0 additions & 1 deletion src/queue/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ export function startPlayersQueue() {
initializedQueue = true
const { engine, players } = getSDK()
players.onLeaveScene((userId: string) => {
console.log('Player leave scene', userId)
removePlayer(userId)
})

Expand Down

0 comments on commit 8821da3

Please sign in to comment.