pinball/assets/_Game/Scripts/Manager/GameManager.ts

72 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-03-06 10:08:30 -08:00
import { _decorator, Component, Prefab, Node, Vec2, Vec3, randomRangeInt, CCInteger, Input } from 'cc';
2024-03-06 03:09:17 -08:00
import ObjectPool from '../Pool/ObjectPool';
2024-03-06 07:10:31 -08:00
import { Ball } from '../Gameplay/Ball';
2024-03-06 10:08:30 -08:00
import Utilities from '../Utilities/Utilities';
import GameState from '../Enum/GameState';
import { EventManger } from './EventManger';
import GameEvent from '../Enum/GameEvent';
2024-03-06 01:28:01 -08:00
const { ccclass, property } = _decorator;
@ccclass('GameManager')
export class GameManager extends Component {
//singleton
private static _instance: GameManager = null;
public static get instance(): GameManager {
return GameManager._instance;
}
2024-03-06 03:09:17 -08:00
@property({ type: Prefab, visible: true })
private _ballPrefab: Prefab;
2024-03-06 10:08:30 -08:00
@property({ type: Vec3, visible: true })
private _ballSpawnPosition: Vec3;
@property({ type: CCInteger, visible: true })
private _balls = 3;
2024-03-06 03:09:17 -08:00
private _ballPool: ObjectPool;
2024-03-06 10:08:30 -08:00
private _gameState = GameState.Init;
2024-03-06 03:09:17 -08:00
2024-03-06 01:28:01 -08:00
public highestStreak: number;
public score = 0;
2024-03-06 03:09:17 -08:00
protected onLoad(): void {
2024-03-06 10:08:30 -08:00
GameManager._instance = this;
2024-03-06 07:10:31 -08:00
this._ballPool = new ObjectPool(this._ballPrefab, 10, false, Ball);
2024-03-06 03:09:17 -08:00
}
2024-03-06 10:08:30 -08:00
protected async start() {
// this.spawnBall();
const a = [1, 4, 4, 5];
}
private changeGameState(state: GameState) {
this._gameState = state;
EventManger.instance.emit(GameEvent.GameStateChange, this._gameState);
}
public spawnBall(): Ball {
const ball = this._ballPool.get(this.node, Ball);
ball.node.setPosition(this._ballSpawnPosition);
let dir = randomRangeInt(-1, 2);
while (dir == 0) {
dir = randomRangeInt(-1, 2);
}
const force = new Vec2(dir, 1);
ball.addFocre(force.multiply2f(1, 50));
return ball;
}
public async ballOut(ball: Node) {
this._balls--;
if (this._balls === 0) {
return;
}
this._ballPool.release(ball);
await Utilities.delay(1000);
// this.spawnBall();
}
2024-03-06 01:28:01 -08:00
public onRevive() {
throw new Error('Method not implemented.');
}
}