312 lines
11 KiB
TypeScript
312 lines
11 KiB
TypeScript
// Learn TypeScript:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
const {ccclass, property} = cc._decorator;
|
|
|
|
export enum BlockType{
|
|
/*普通地块 */
|
|
Nomal = 0,
|
|
/*起点地块 */
|
|
Start = 1,
|
|
/*湿地 */
|
|
Nunja = 2,
|
|
/*山峰 */
|
|
Peak = 3,
|
|
/*终点地块 */
|
|
End = 4,
|
|
|
|
/*息壤 */
|
|
Xi_Soil = 5,
|
|
/*加固 */
|
|
Reinforce = 6
|
|
}
|
|
|
|
export enum PathType{
|
|
err = "err",
|
|
up = "up",
|
|
down = "down",
|
|
left = "left",
|
|
right = "right",
|
|
up_left = "up_left",
|
|
up_right = "up_right",
|
|
down_left = "down_left",
|
|
down_right = "down_right",
|
|
left_up = "left_up",
|
|
left_down = "left_down",
|
|
right_up = "right_up",
|
|
right_down = "right_down",
|
|
}
|
|
|
|
@ccclass
|
|
export default class NewClass extends cc.Component {
|
|
// LIFE-CYCLE CALLBACKS:
|
|
@property(cc.SpriteAtlas)
|
|
UI: cc.SpriteAtlas = null;
|
|
|
|
pos_Shifting:number;
|
|
block_Type:number;
|
|
path_Type:string;
|
|
finishi:boolean
|
|
onLoad () {
|
|
this.finishi = false;
|
|
this.pos_Shifting = 0;
|
|
}
|
|
|
|
start () {
|
|
|
|
}
|
|
|
|
initData(type){
|
|
this.block_Type = type;
|
|
if(type == cc.Enum(BlockType).Start){
|
|
this.node.color = cc.color(245,70,70);
|
|
}
|
|
else if(type == cc.Enum(BlockType).End){
|
|
this.node.color = cc.color(20,255,0);
|
|
}
|
|
else if(type == cc.Enum(BlockType).Nunja){
|
|
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e5"];
|
|
}
|
|
else if(type == cc.Enum(BlockType).Peak){
|
|
let random = Math.floor(Math.random()*4+1);
|
|
let name = "shan" + random;
|
|
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
}
|
|
|
|
setPath(type){
|
|
this.path_Type = type;
|
|
}
|
|
|
|
set_Xi_SoilType(direction,end){
|
|
console.log("息壤",direction);
|
|
if(this.block_Type == cc.Enum(BlockType).Nunja){
|
|
this.block_Type = cc.Enum(BlockType).Nomal;
|
|
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block_Bg"];
|
|
}
|
|
if(end != null){
|
|
setTimeout(() => {
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,(end+1));
|
|
}, 1000);
|
|
|
|
}
|
|
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
let target = this.node.getChildByName("Xi_Soil");
|
|
this.path_Type = direction;
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
cc.tween(target)
|
|
.to(0.5,{opacity:255})
|
|
.to(0.5,{opacity:0})
|
|
.call(() =>{
|
|
if(direction != null && end == null){
|
|
let data = {
|
|
order:0,
|
|
time:0.2,
|
|
type:0,
|
|
circulate:false
|
|
};
|
|
this.runWater(data);
|
|
}
|
|
})
|
|
.start();
|
|
}
|
|
|
|
|
|
//洪峰执行
|
|
runWater(data){
|
|
if(this.path_Type == "err"){
|
|
setTimeout(() => {
|
|
if(data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
}, data.time);
|
|
return;
|
|
}
|
|
//如果双向都占用了还进来就算死了-
|
|
if(this.node.getChildByName("vertical").active == true && this.node.getChildByName("horizontal").active == true){
|
|
alert("河道已经交叉,不能再通过");
|
|
return;
|
|
}
|
|
|
|
else if(this.node.getChildByName("turn").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil){
|
|
alert("河道过弯处,不能再交叉河道");
|
|
return;
|
|
}
|
|
var target = null;
|
|
var progress = 1;
|
|
var time = data.time;
|
|
var order = data.order + 1;
|
|
var random = Math.floor(Math.random()*4 + 1);
|
|
target = this.node.getChildByName("vertical");
|
|
let water1 = target.getChildByName("wave").getChildByName("water1");
|
|
let water2 = target.getChildByName("wave").getChildByName("water2");
|
|
let water3 = target.getChildByName("wave").getChildByName("water3");
|
|
let timeDelay = 0.15;
|
|
water1.runAction(cc.sequence(cc.moveTo(0.6,cc.v2(water1.x,120)),cc.delayTime(timeDelay),
|
|
cc.callFunc(()=>{
|
|
water1.y = -120
|
|
})).repeatForever());
|
|
water2.runAction(cc.sequence(cc.moveTo(0.6,cc.v2(water2.x,120)),cc.delayTime(timeDelay),
|
|
cc.callFunc(()=>{
|
|
water2.y = -120
|
|
})).repeatForever());
|
|
water3.runAction(cc.sequence(cc.moveTo(0.6,cc.v2(water3.x,120)),cc.delayTime(timeDelay),
|
|
cc.callFunc(()=>{
|
|
water3.y = -120
|
|
})).repeatForever());
|
|
var name = "a" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
|
|
if(target.active == true){
|
|
target = this.node.getChildByName("horizontal");
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
// console.log(this.path_Type,data.order);
|
|
if(this.path_Type == cc.Enum(PathType).up){
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).down){
|
|
target.angle = 180;
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).left){
|
|
target.angle = 90;
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).right){
|
|
target.angle = 270;
|
|
name = "b" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
}
|
|
else{
|
|
target = this.node.getChildByName("turn");
|
|
let water = target.getChildByName("wave").getChildByName("water");
|
|
water.opacity = 0
|
|
water.runAction(cc.sequence(cc.rotateTo(7.2,-1080),cc.delayTime(0)).repeatForever());
|
|
setTimeout(() => {
|
|
water.opacity = 255;
|
|
}, 200);
|
|
|
|
name = "c" + random;
|
|
//if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
|
progress = 0.25;
|
|
if(this.path_Type == cc.Enum(PathType).up_left){
|
|
target.setPosition(-this.pos_Shifting,-this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).up_right){
|
|
target.scaleX = -1;
|
|
target.setPosition(this.pos_Shifting,-this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).down_left){
|
|
target.angle = 180;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting,this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).down_right){
|
|
target.angle = 180;
|
|
target.setPosition(this.pos_Shifting,this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).left_up){
|
|
target.angle = -90;
|
|
target.scaleY = -1;
|
|
target.setPosition(this.pos_Shifting,this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).left_down){
|
|
target.angle = 90;
|
|
target.setPosition(-this.pos_Shifting,-this.pos_Shifting);
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).right_up){
|
|
target.angle = -90;
|
|
target.setPosition(-this.pos_Shifting,this.pos_Shifting);
|
|
|
|
}
|
|
else if(this.path_Type == cc.Enum(PathType).right_down){
|
|
target.angle = -90;
|
|
target.scaleX = -1;
|
|
target.setPosition(-this.pos_Shifting,-this.pos_Shifting);
|
|
}
|
|
}
|
|
if(this.path_Type == "Reinforce"){
|
|
console.log(data.order);
|
|
target = this.node.getChildByName("Reinforce");
|
|
this.block_Type = cc.Enum(BlockType).Reinforce;
|
|
this.node.getChildByName("vertical").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e1"];
|
|
this.node.getChildByName("turn").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e3"];
|
|
this.node.getChildByName("horizontal").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e2"];
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
progress = 1;
|
|
cc.tween(target)
|
|
.to(time,{opacity:255})
|
|
.call(() =>{
|
|
if(data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.changeMap,order);
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
})
|
|
.start();
|
|
}
|
|
else if(this.path_Type == "Xi_Soil"){
|
|
target.active = false;
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
target = this.node.getChildByName("Xi_Soil");
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
cc.tween(target)
|
|
.to(0.5,{opacity:255})
|
|
.to(0.5,{opacity:0})
|
|
.call(() =>{
|
|
if(data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
})
|
|
.start();
|
|
}
|
|
else if(this.path_Type == "End"){
|
|
target.active = false;
|
|
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
|
target = this.node.getChildByName("End");
|
|
target.active = true;
|
|
target.opacity = 0;
|
|
cc.tween(target)
|
|
.to(0.5,{opacity:255})
|
|
.call(() =>{
|
|
console.log("游戏结束");
|
|
// if(data.circulate)
|
|
// cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
})
|
|
.start();
|
|
}
|
|
else{
|
|
target.active = true;
|
|
if(this.block_Type != cc.Enum(BlockType).Xi_Soil){
|
|
target.getComponent(cc.Sprite).fillRange = 0;
|
|
cc.tween(target.getComponent(cc.Sprite))
|
|
.to(time,{fillRange:progress})
|
|
.call(() =>{
|
|
if(data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
})
|
|
.start();
|
|
}
|
|
else{
|
|
target.opacity = 0;
|
|
target.getComponent(cc.Sprite).fillRange = 1;
|
|
cc.tween(target)
|
|
.to(time,{opacity:255})
|
|
.call(() =>{
|
|
if(data.circulate)
|
|
cc.fx.Notifications.emit(cc.fx.Message.next,order);
|
|
})
|
|
.start();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// update (dt) {}
|
|
}
|