96 lines
3.1 KiB
TypeScript
96 lines
3.1 KiB
TypeScript
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);
|
|
}
|
|
} |