123 lines
4.0 KiB
TypeScript
123 lines
4.0 KiB
TypeScript
import LDataGoldManager from "./datas/LDataGoldManager";
|
|
import Common from "./common/Common";
|
|
import GameManager from "./manager/GameManager";
|
|
import SoundManager from "./manager/SoundManager";
|
|
import Define from "./common/Define";
|
|
|
|
// Learn TypeScript:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
const {ccclass} = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class GoldCtr extends cc.Component {
|
|
|
|
private rigidBody:cc.RigidBody;
|
|
//奖励金币的数量
|
|
goldCount:number = 0;
|
|
//是否可以收集
|
|
isCanCollect:boolean = true;
|
|
|
|
isCanFly:boolean = true;
|
|
|
|
isCanUseTag:boolean = false;
|
|
goldId:number = 0;
|
|
|
|
static goldTextArr:cc.Label[] = [];
|
|
|
|
onLoad () {
|
|
this.rigidBody = this.node.getComponent<cc.RigidBody>(cc.RigidBody);
|
|
this.rigidBody.active = false;
|
|
}
|
|
|
|
setGoldId(id:number){
|
|
this.node.setScale(1,1)
|
|
this.goldCount = LDataGoldManager.GetDataById(id).goldnumber;
|
|
this.isCanUseTag = false;
|
|
this.isCanCollect = true;
|
|
this.isCanFly = true;
|
|
this.node.active = true;
|
|
this.rigidBody.gravityScale = 1;
|
|
this.goldId = id
|
|
|
|
if(Common.getRandom(0,2) == 0){
|
|
this.rigidBody.linearVelocity = cc.v2(Common.getRandom(100,350)*-1,Common.getRandom(100,350));
|
|
}else{
|
|
this.rigidBody.linearVelocity = cc.v2(Common.getRandom(100,350),Common.getRandom(100,350));
|
|
}
|
|
}
|
|
|
|
onBeginContact(contact: cc.PhysicsContact, selfCollider: cc.PhysicsCollider, otherCollider: cc.PhysicsCollider): void{
|
|
let other:string = otherCollider.node.name;
|
|
if(other.indexOf("cannon") == 0 && this.isCanCollect){
|
|
//SoundManager.palySoundById(Define.soundGetcoin)
|
|
this.isCanCollect = false
|
|
this.showTextEffect()
|
|
}
|
|
}
|
|
|
|
showTextEffect(){
|
|
let nodeText = cc.instantiate(Common.nodeAddGold);
|
|
this.node.getParent().addChild(nodeText);
|
|
nodeText.position = this.node.position;
|
|
nodeText.active = true;
|
|
nodeText.getComponent<cc.Label>(cc.Label).string = "+"+this.goldCount.toString();
|
|
|
|
let x = nodeText.position.x
|
|
let y = nodeText.position.y
|
|
let action = cc.sequence(cc.moveTo(0.8,new cc.Vec2(x,y + Common.getRandom(200,250))),cc.callFunc(function(){
|
|
nodeText.destroy();
|
|
}))
|
|
nodeText.runAction(action)
|
|
nodeText.color = Define.goldTextRGBArr[this.goldId]
|
|
Common.actionLeftRightRotate(nodeText)
|
|
}
|
|
|
|
update(dt){
|
|
if(!this.isCanCollect){
|
|
this.rigidBody.active = false;
|
|
if(this.isCanFly){
|
|
this.fly();
|
|
}
|
|
}else{
|
|
this.rigidBody.active = true;
|
|
}
|
|
}
|
|
//金币飞行
|
|
fly(){
|
|
GameManager.instance.handlerCollectGold(this.goldCount);
|
|
this.node.setScale(0.5,0.5);
|
|
this.node.runAction(
|
|
cc.sequence(cc.moveTo(0.5,new cc.Vec2(50,1085)).easing(cc.easeIn(1)),
|
|
cc.callFunc(function(){
|
|
this.isCanUseTag = true;
|
|
this.node.active = false
|
|
}.bind(this))
|
|
));
|
|
this.isCanFly = false;
|
|
}
|
|
|
|
setIcon(icon:cc.SpriteFrame){
|
|
this.node.getComponent<cc.Sprite>(cc.Sprite).spriteFrame = icon;
|
|
}
|
|
|
|
autoCollect(){
|
|
if(!this.isCanUseTag){
|
|
this.isCanCollect = false
|
|
}
|
|
}
|
|
|
|
clear(){
|
|
this.isCanCollect = false
|
|
this.isCanUseTag = true;
|
|
this.node.active = false
|
|
}
|
|
}
|