mirror of https://github.com/axmolengine/axmol.git
100 lines
3.8 KiB
JavaScript
100 lines
3.8 KiB
JavaScript
var LevelManager = cc.Class.extend({
|
|
_currentLevel:null,
|
|
_gameLayer:null,
|
|
ctor:function(gameLayer){
|
|
if(!gameLayer){
|
|
throw "gameLayer must be non-nil";
|
|
}
|
|
this._currentLevel = Level1;
|
|
this._gameLayer = gameLayer;
|
|
this.setLevel(this._currentLevel);
|
|
},
|
|
|
|
setLevel:function(level){
|
|
for(var i = 0; i< level.enemies.length; i++){
|
|
this._currentLevel.enemies[i].ShowTime = this._minuteToSecond(this._currentLevel.enemies[i].ShowTime);
|
|
}
|
|
},
|
|
_minuteToSecond:function(minuteStr){
|
|
if(!minuteStr)
|
|
return 0;
|
|
if(typeof(minuteStr) != "number"){
|
|
var mins = minuteStr.split(':');
|
|
if(mins.length == 1){
|
|
return parseInt(mins[0],10);
|
|
}else {
|
|
return parseInt(mins[0],10 )* 60 + parseInt(mins[1],10);
|
|
}
|
|
}
|
|
return minuteStr;
|
|
},
|
|
|
|
loadLevelResource:function(deltaTime){
|
|
//load enemy
|
|
for(var i = 0; i< this._currentLevel.enemies.length; i++){
|
|
var selEnemy = this._currentLevel.enemies[i];
|
|
if(selEnemy){
|
|
if(selEnemy.ShowType == "Once"){
|
|
if(selEnemy.ShowTime == deltaTime){
|
|
for(var tIndex = 0; tIndex < selEnemy.Types.length;tIndex++ ){
|
|
this.addEnemyToGameLayer(selEnemy.Types[tIndex]);
|
|
}
|
|
}
|
|
}else if(selEnemy.ShowType == "Repeate"){
|
|
if(deltaTime % selEnemy.ShowTime === 0){
|
|
for(var rIndex = 0; rIndex < selEnemy.Types.length;rIndex++ ){
|
|
this.addEnemyToGameLayer(selEnemy.Types[rIndex]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
addEnemyToGameLayer:function(enemyType){
|
|
var addEnemy = new Enemy(EnemyType[enemyType]);
|
|
|
|
var enemypos = cc.p( 80 + (winSize.width - 160) * Math.random(), winSize.height);
|
|
var enemycs = addEnemy.getContentSize();
|
|
addEnemy.setPosition( enemypos );
|
|
|
|
|
|
var offset, tmpAction;
|
|
var a0=0;
|
|
var a1=0;
|
|
switch (addEnemy.moveType) {
|
|
case MW.ENEMY_MOVE_TYPE.ATTACK:
|
|
offset = this._gameLayer._ship.getPosition();
|
|
tmpAction = cc.MoveTo.create(1, offset);
|
|
break;
|
|
case MW.ENEMY_MOVE_TYPE.VERTICAL:
|
|
offset = cc.p(0, -winSize.height - enemycs.height);
|
|
tmpAction = cc.MoveBy.create(4, offset);
|
|
break;
|
|
case MW.ENEMY_MOVE_TYPE.HORIZONTAL:
|
|
offset = cc.p(0, -100 - 200 * Math.random());
|
|
a0 = cc.MoveBy.create(0.5, offset);
|
|
a1 = cc.MoveBy.create(1, cc.p(-50 - 100 * Math.random(), 0));
|
|
var onComplete = cc.CallFunc.create(addEnemy, function (pSender) {
|
|
var a2 = cc.DelayTime.create(1);
|
|
var a3 = cc.MoveBy.create(1, cc.p(100 + 100 * Math.random(), 0));
|
|
pSender.runAction(cc.RepeatForever.create(
|
|
cc.Sequence.create(a2, a3, a2.copy(), a3.reverse())
|
|
));
|
|
});
|
|
tmpAction = cc.Sequence.create(a0, a1, onComplete);
|
|
break;
|
|
case MW.ENEMY_MOVE_TYPE.OVERLAP:
|
|
var newX = (enemypos.x <= winSize.width / 2) ? 320 : -320;
|
|
a0 = cc.MoveBy.create(4, cc.p(newX, -240));
|
|
a1 = cc.MoveBy.create(4,cc.p(-newX,-320));
|
|
tmpAction = cc.Sequence.create(a0,a1);
|
|
break;
|
|
}
|
|
|
|
this._gameLayer.addChild(addEnemy, addEnemy.zOrder, MW.UNIT_TAG.ENEMY);
|
|
MW.CONTAINER.ENEMIES.push(addEnemy);
|
|
addEnemy.runAction(tmpAction);
|
|
}
|
|
});
|