You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
3.4 KiB
TypeScript

const {ccclass, property} = cc._decorator;
import {gameMY, moduleState} from './gameModule';
export enum columnState {
Ready = 1,
Spining = 2,
Stopping = 3,
EngStop = 99,
}
@ccclass
export class columnControl extends cc.Component {
// @property({type: gameMY}) 這句不行
// public gameModule: gameMY | null = null;
@property((cc.Node))
gameModule: cc.Node;
@property(Number)
rollSpeed:number = 1;
// private nowAction = null;
private columnItem: Array<number> = [];
private itemList:Array<number>;
private gameModuleScript:gameMY;
nowState:columnState;
protected onLoad () {
this.gameModuleScript = this.gameModule.getComponent('gameMY');
}
protected start () {
this.itemList = Object.values(this.gameModuleScript.itemNameMapping);
// column 位置初始化
this.node.y = this.gameModuleScript.itemSize;
// 隨機初始化 item 圖片
for(let i=0;i<this.node.childrenCount;i++){
let a = this.itemList[Math.floor(Math.random() * 12)];
this.columnItem.push( a );
this.node.children[i].getComponent(cc.Sprite).spriteFrame = this.gameModuleScript.item_spriteFrame[a]
}
this.nowState = columnState.Ready;
}
protected update (dt) {
let dY = Math.ceil(this.rollSpeed * this.gameModuleScript.itemSize * dt)
switch(this.nowState){
case columnState.Ready:
//狀態檢查與更新
if(this.gameModuleScript.nowState == moduleState.Spining){
this.nowState = columnState.Spining;
}
break;
case columnState.Spining:
if(this.node.y - dY <= 0){
this.node.y = this.node.y + this.gameModuleScript.itemSize - dY;
//更新圖片
this.prepareNextItem();
for(let i=0;i<this.columnItem.length;i++){
this.node.children[i].getComponent(cc.Sprite).spriteFrame = this.gameModuleScript.itemBlur_spriteFrame[this.columnItem[i]];
}
//狀態檢查與更新
if(this.gameModuleScript.nowState == moduleState.Stopping){
this.nowState = columnState.Stopping;
}
}else{this.node.y -= dY;}
break;
case columnState.Stopping:
if(this.node.y - dY <= 0){
this.node.y = this.gameModuleScript.itemSize;
//更新圖片
this.prepareNextItem();
for(let i=0;i<this.columnItem.length;i++){
this.node.children[i].getComponent(cc.Sprite).spriteFrame = this.gameModuleScript.item_spriteFrame[this.columnItem[i]];
}
this.gameModule.emit("AColumnStop")
//狀態檢查與更新
this.nowState = columnState.Ready; // 狀態復歸
}else{this.node.y -= dY;}
break;
case columnState.EngStop:
// To Nothing just stop whole column
break;
}
}
prepareNextItem() {
let a = this.itemList[Math.floor(Math.random() * this.itemList.length)];
this.columnItem.unshift( a );
this.columnItem.pop();
}
}