pinball/assets/Scripts/LevelController.ts

96 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-02-27 18:19:33 -08:00
import { _decorator, CCInteger, Component, Node, randomRangeInt } from 'cc';
import { GameplayController } from './GameplayController';
import { EventType } from './Enums';
const { ccclass, property } = _decorator;
@ccclass('LevelController')
export class LevelController extends Component {
@property(CCInteger)
private maxLevel: number = 5;
@property({ type: CCInteger, readonly: true })
private currentLevel: number = 0;
@property([Node])
private levelObstacles: Node[] = [];
@property([CCInteger])
private levelBalls: number[] = [];
@property([CCInteger])
private scoreToLevelUp: number[] = [];
private isLeveledUp: boolean = false;
protected start(): void {
this.maxLevel=5;
GameplayController.Instance().eventUpdateScore.on(EventType.UpdateScore, this.HandleLevelUp, this);
}
public HandleLevelUp(score: number): void {
for (let i = this.scoreToLevelUp.length - 1; i >= 0; i--) {
if (score == this.scoreToLevelUp[i] && !this.isLeveledUp) {
this.LevelUp();
this.isLeveledUp = true;
}
}
if (this.currentLevel >= this.maxLevel) {
console.log("Current level is: " + this.currentLevel + " while max level is: " + this.maxLevel);
}
this.scoreToLevelUp.forEach(scoreCheck => {
if (score == scoreCheck) return;
this.isLeveledUp = false;
});
}
public LevelUp(): void {
if (this.currentLevel >= this.maxLevel) return;
this.currentLevel++;
GameplayController.Instance().SetBall(this.levelBalls[this.currentLevel - 1]);
this.ObstacleControl();
GameplayController.Instance().uiController.currentLevelTxt.string = "Level: " + this.currentLevel;
}
public GetCurrentLevel(): number {
return this.currentLevel;
}
private ObstacleControl(): void {
switch (this.currentLevel) {
case 1:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
break;
case 2:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[0].active = true;
break;
case 3:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[1].active = true;
break;
case 4:
this.levelObstacles.forEach(obstacle => {
obstacle.active = false;
});
this.levelObstacles[2].active = true;
break;
case 5:
this.RandomSetObstacle();
break;
}
}
private RandomSetObstacle(): void {
setTimeout(() => {
let random = randomRangeInt(0, this.levelObstacles.length);
this.levelObstacles.forEach(element => {
element.active = false;
});
this.levelObstacles[random].active = true;
}, 200);
}
}