| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141 |
- function CGame(oData) {
- var _oInterface;
- var _oTrack;
- var _oMonitor;
- var _oAnimMonitor;
- var _oShapeWall;
- var _oPinBinder;
- var _oSemaphore;
- var _oCharacter;
- var _oScene;
- var _oBall;
- var _oContainerGame;
- var _oPowerBar;
- var _oEffectArrow;
- var _oDirFunc;
- var _bLaunched = false;
- var _bWallCollision = false;
- var _bDetectPinMovement = false;
- var _bPressedKeys = false;
- var _bSpare = false;
- var _bStrike = false;
- var _bKeyDir = false;
- var _bPinCollision = false;
- var _bAnimStrike = false;
- var _bAnimSpare = false;
- var _bAnimGutter = false;
- var _bChannelCol = false;
- var _bRepositionTurn = false;
- var _bPhysicsPinsDepends = true;
- var _bPlayCharacter = false;
- var _bExtraTurn = false;
- var _bHitFloor = false;
- var _bAwakePins = false;
- var _iScore;
- var _iTurn = 1;
- var _iStage = 0;
- var _iStateLaunch = DIRECTION;
- var _iPinDown;
- var _iPinDownTurn;
- var _aObjects;
- var _aPinObject;
- var _aScoreStage;
- var _aScoreStageStrikeCounter;
- var _fTimeRefreshDirection;
- var _fTimeResetLaunch;
- var _iGameState = STATE_INIT;
- var _oCamera = null;
- this._init = function () {
- this.pause(true);
- _iScore = 0;
- _iPinDown = 0;
- _iPinDownTurn = 0;
- $(s_oMain).trigger("start_session");
- $(s_oMain).trigger("start_level", 1);
- _aObjects = new Array();
- _aPinObject = new Array();
- playSound("ambience", 1, true);
- this.resetScoreStageArray();
- _oContainerGame = new createjs.Container();
- s_oStage.addChild(_oContainerGame);
- _oScene = new CScenario();
- _oShapeWall = new createjs.Shape();
- _oShapeWall.graphics.beginFill("black").drawRect(0, 0, CANVAS_WIDTH, 460);
- _oContainerGame.addChild(_oShapeWall);
- _oTrack = new CTrack(0, 362, s_oSpriteLibrary.getSprite("bowling_track"), _oScene.getTrackBodyDepth(), _oContainerGame);
- _aObjects.push(_oTrack);
- _oPowerBar = new CPowerBar(100, CANVAS_HEIGHT_HALF + 225, s_oStage);
- _oPowerBar.setVisible(false);
- var oSpriteEffectArrow = s_oSpriteLibrary.getSprite("effect_arrow");
- _oEffectArrow = new CEffectArray(CANVAS_WIDTH + 10, CANVAS_HEIGHT_HALF + 430, oSpriteEffectArrow, s_oStage);
- _oEffectArrow.setVisible(false);
- if (SHOW_3D_RENDER) {
- _oCamera = camera;
- } else {
- _oCamera = createOrthoGraphicCamera();
- }
- _oScene.ballBody().mass = 0;
- var oSpirtePins = s_oSpriteLibrary.getSprite("pin");
- for (var i = 0; i < PINS_POSITION.length; i++) {
- _aPinObject[i] = new CPin(0, 0, oSpirtePins, _oScene.getPinByID(i), _oContainerGame);
- _aObjects.push(_aPinObject[i]);
- _aPinObject[i].setPosRef(OFFSET_TRACK_POSITION.z);
- }
- if (PIN_TEST) {
- _aPinObject.push(new CPin(0, 0, oSpirtePins, _oScene.getPinByID(i), _oContainerGame));
- _aObjects.push(_aPinObject[_aPinObject.length - 1]);
- _aPinObject[_aPinObject.length - 1].getPhysics().quaternion.setFromEuler(Math.radians(0), Math.radians(0), Math.radians(0), 'XYZ');
- _aPinObject[_aPinObject.length - 1].getPhysics().mass = 0;
- }
- var oSpriteBall = s_oSpriteLibrary.getSprite("ball");
- _oBall = new CBall(0, 0, oSpriteBall, _oScene.ballBody(), _oContainerGame);
- _oBall.setVisible(false);
- _aObjects.push(_oBall);
- resizeCanvas3D();
- var oSpritePinBinder = s_oSpriteLibrary.getSprite("pin_binder");
- _oPinBinder = new CPinDragger(397, 470, oSpritePinBinder, _oContainerGame);
- _oPinBinder.setVisible(false);
- _oPinBinder.changeState("throw_pins_0");
- fadeSound(1,0,MS_FADE_SOUNDTRACK,"soundtrack");
- var oSpriteMonitor = s_oSpriteLibrary.getSprite("monitor");
- _oMonitor = createBitmap(oSpriteMonitor);
- _oMonitor.y = 225;
- _oContainerGame.addChild(_oMonitor);
- var oSpriteSemaphore = s_oSpriteLibrary.getSprite("semaphore");
- _oSemaphore = new CSemaphore(CANVAS_WIDTH_HALF + 3, 381, oSpriteSemaphore, _oContainerGame);
- _oCharacter = new CCharacter(CHARACTER_START_POS.x, CHARACTER_START_POS.y, _oContainerGame);
- _oInterface = new CInterface();
- _oAnimMonitor = new CAnimMonitor(0, 291, _oInterface.getContainerBoard());
- if (!s_bMobile) {
- document.onkeydown = onKeyDown;
- document.onkeyup = onKeyUp;
- }
- if (!SHOW_3D_RENDER) {
- _oInterface.createHelpPanel();
- } else {
- this.onExitHelp();
- }
- };
- this.resetScoreStageArray = function () {
- _aScoreStage = new Array();
- _aScoreStageStrikeCounter = new Array();
- for (var i = 0; i < LAUNCH_TURN; i++) {
- _aScoreStage[i] = new Array();
- if(i !== 9){
- for(var j=0; j<3; j++){
- _aScoreStage[i][j] = 0;
- }
- } else {
- for(var j=0; j<4; j++){
- _aScoreStage[i][j] = 0;
- }
- }
-
- _aScoreStageStrikeCounter[i] = 0;
- }
- };
- this.refreshPos = function (iXPos, iYPos) {
- _oPowerBar.setPosition(_oPowerBar.getStartPos().x + iXPos, _oPowerBar.getStartPos().y - iYPos);
- _oEffectArrow.setPosition(_oEffectArrow.getStartPos().x - iXPos, _oEffectArrow.getStartPos().y - iYPos);
- };
- this.startPinsPosition = function () {
- this.updatePinsPosition();
- for (var i = 0; i < _aPinObject.length; i++) {
- _aPinObject[i].setStartPos(_aPinObject[i].getX(), _aPinObject[i].getY());
- }
- };
- this.onMouseDown = function () {
- if (_iStateLaunch === DIRECTION) {
- s_oGame.deactiveEventMouseMove();
- s_oGame.activeStateLaunchPower();
- } else if (_iStateLaunch === POWER) {
- _oPowerBar.removeTweensMask();
- s_oGame.activeStateLaunchEffect();
- } else if (_iStateLaunch === EFFECT) {
- s_oGame.launchBall();
- _iStateLaunch = DIRECTION;
- }
- };
- this.manageControl = function () {
- if (_bLaunched) {
- return;
- }
- if (_iStateLaunch === DIRECTION) {
- _oInterface.dirArrowsVisibility(false);
- _bKeyDir = false;
- s_oGame.activeStateLaunchPower();
- } else if (_iStateLaunch === POWER) {
- _oPowerBar.removeTweensMask();
- s_oGame.activeStateLaunchEffect();
- } else if (_iStateLaunch === EFFECT) {
- _oEffectArrow.stopAnimation();
- _oEffectArrow.removeAllEventListeners();
- _bPlayCharacter = true;
- _bWallCollision = false;
- _bLaunched = true;
- _iStateLaunch = DIRECTION;
- }
- };
- function onKeyDown(evt) {
- if (!_bPressedKeys && _iGameState === STATE_PLAY && !_bLaunched) {
- if (_iStateLaunch === DIRECTION) {
- if (evt.keyCode === 37) {
- s_oGame.onLeft();
- _bPressedKeys = true;
- } else if (evt.keyCode === 39) {
- s_oGame.onRight();
- _bPressedKeys = true;
- }
- }
- if (evt.keyCode === 32) {
- s_oGame.manageControl();
- _bPressedKeys = true;
- }
- }
- evt.preventDefault();
- return false;
- }
- function onKeyUp(evt) {
- if (_bPressedKeys && _iGameState === STATE_PLAY) {
- if (_iStateLaunch === DIRECTION) {
- if (evt.keyCode === 37) {
- _bPressedKeys = false;
- s_oGame.dirKeyUp();
- } else if (evt.keyCode === 39) {
- _bPressedKeys = false;
- s_oGame.dirKeyUp();
- }
- }
- if (evt.keyCode === 32) {
- _bPressedKeys = false;
- }
- }
- evt.preventDefault();
- return false;
- }
- this.dirKeyUp = function () {
- _bKeyDir = false;
- };
- this.onLeft = function () {
- _oDirFunc = s_oGame.onLeft;
- _bKeyDir = true;
- _fTimeRefreshDirection = TIME_REFRESH_DIRECTION;
- var oBallBody = _oScene.ballBody();
- oBallBody.position.x -= DIRECTION_VELOCITY;
- if (oBallBody.position.x > LIMIT_HAND_RANGE_POS.x) {
- oBallBody.position.x = LIMIT_HAND_RANGE_POS.x;
- } else {
- _oCharacter.setPosition(_oCharacter.getX() - DIRECTION_CHARACTER_VELOCITY, _oCharacter.getY());
- }
- };
- this.onRight = function () {
- _oDirFunc = s_oGame.onRight;
- _bKeyDir = true;
- _fTimeRefreshDirection = TIME_REFRESH_DIRECTION;
- var oBallBody = _oScene.ballBody();
- oBallBody.position.x += DIRECTION_VELOCITY;
- if (oBallBody.position.x < -LIMIT_HAND_RANGE_POS.x) {
- oBallBody.position.x = -LIMIT_HAND_RANGE_POS.x;
- } else {
- _oCharacter.setPosition(_oCharacter.getX() + DIRECTION_CHARACTER_VELOCITY, _oCharacter.getY());
- }
- };
- this.sortDepth = function (oObj1, oObj2) {
- if (oObj1 === null || oObj2 === null) {
- return;
- }
- if (oObj1.getDepthPos() < oObj2.getDepthPos()) {
- if (_oContainerGame.getChildIndex(oObj1.getObject()) > _oContainerGame.getChildIndex(oObj2.getObject())) {
- _oContainerGame.swapChildren(oObj1.getObject(), oObj2.getObject());
- }
- } else if (oObj1.getDepthPos() > oObj2.getDepthPos()) {
- if (_oContainerGame.getChildIndex(oObj2.getObject()) > _oContainerGame.getChildIndex(oObj1.getObject())) {
- _oContainerGame.swapChildren(oObj2.getObject(), oObj1.getObject());
- }
- }
- };
- this.onExitHelp = function () {
- this.pause(false);
- _oInterface.onExitFromHelp();
- };
- this.ballPosition = function () {
- var oBallBody = _oScene.ballBody();
- var oPos2DBall = this.convert3dPosTo2dScreen(oBallBody.position, _oCamera);
- var fScaleDistance = oPos2DBall.z * (BALL_SCALE_FACTOR - _oBall.getStartScale()) + _oBall.getStartScale();
- _oBall.setPosition(oPos2DBall.x, oPos2DBall.y);
- _oBall.scale(fScaleDistance);
- if (!s_bMobile) {
- this.refreshShadowCast(_oBall, oBallBody, fScaleDistance);
- }
- };
- this.refreshShadowCast = function (oObject, oBody, fScaleDistance) {
- var oFieldBody = _oScene.getTrackBody();
- if (oBody.position.z - BALL_RADIUS < oFieldBody.position.z) {
- oObject.scaleShadow(0);
- return;
- }
- var oPosShadow = {x: oBody.position.x, y: oBody.position.y, z: oFieldBody.position.z};
- var oPos2dShadow = this.convert3dPosTo2dScreen(oPosShadow, _oCamera);
- var fDistance = (-(oBody.position.z - BALL_RADIUS) + oFieldBody.position.z) + 1;
- var fScaleHeight = fDistance * fScaleDistance;
- oObject.scaleShadow(fScaleHeight);
- oObject.setAlphaByHeight(fDistance);
- oObject.setPositionShadow(oPos2dShadow.x, oPos2dShadow.y);
- };
- this.launchBall = function () {
- _oBall.setVisible(true);
- var fForce = (_oPowerBar.getMaskValue() / _oPowerBar.getMaskHeight()) * 100;
- if (fForce < MIN_LAUNCH_FORCE) {
- fForce = MIN_LAUNCH_FORCE;
- }
- s_oGame.addImpulseToBall(-fForce * FORCE_RATE);
- s_oGame.addAngularVelocityToBall(_oEffectArrow.getStoppedFrame() * EFFECT_POWER_RATE);
- };
- this.activeStateLaunchPower = function () {
- _iStateLaunch = POWER;
- _oPowerBar.setVisible(true);
- _oPowerBar.animFade(1);
- _oPowerBar.animateMask(TIME_POWER_BAR);
- };
- this.activeStateLaunchEffect = function () {
- _iStateLaunch = EFFECT;
- _oEffectArrow.animFade(1);
- _oEffectArrow.animArrow();
- _oEffectArrow.setVisible(true);
- };
- this.addAngularVelocityToBall = function (fForce) {
- var oForce = {x: 0, y: fForce, z: 0};
- _oScene.setElementAngularVelocity(_oScene.ballBody(), oForce);
- };
- this.completeLaunch = function () {
- if (_bWallCollision) {
- return;
- }
- _bWallCollision = true;
- _bDetectPinMovement = true;
- _oBall.animFade(0);
- _oBall.playSound();
- createjs.Tween.get(this).wait(1500).call(function () {
- _oCharacter.animFade(0);
- });
- _fTimeResetLaunch = TIME_RESET_LAUNCH;
- };
- this.isAwakwePins = function (bVal) {
- _bAwakePins = bVal;
- };
- this.awakePins = function () {
- if (_bAwakePins) {
- for (var i = 0; i < _aPinObject.length; i++) {
- if (_aPinObject[i].getPhysics().position.y > _oTrack.getDepthPos() && _aPinObject[i].isDownYet()) {
- _aPinObject[i].getPhysics().wakeUp();
- } else if (_aPinObject[i].getPhysics().position.y > _oTrack.getDepthPos() && _iTurn === 1) {
- _aPinObject[i].getPhysics().wakeUp();
- }
- }
- }
- };
- this.onStopAllPin = function () {
- var iPinDownTurn = this.countPinDown();
- _iPinDown += iPinDownTurn;
- this.controlTurnResult(iPinDownTurn);
- _oPowerBar.mask(0);
- _oEffectArrow.animFade(0);
- _oPowerBar.animFade(0);
- };
- this.setPinsPhysicsMovement = function (bVal) {
- _bPhysicsPinsDepends = bVal;
- };
- this.nextStage = function () {
- this.resetScene();
- _oPinBinder.setVisible(false);
- _oScene.getPinsBinder().collisionResponse = 0;
- _oScene.getPinsBinder().position.y = PINS_BINDER_POSITION.y;
- _iPinDownTurn = 0;
- this.activeControl();
- };
- this.pinBinderAction = function () {
- _oPinBinder.setVisible(true);
- _oScene.getPinsBinder().collisionResponse = 1;
- _oPinBinder.animThrowPins();
- };
- this.repositionPins = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- _aPinObject[i].resetState();
- _aPinObject[i].setPosition(_aPinObject[i].getX(), _aPinObject[i].getY() - 100);
- _aPinObject[i].animReposition(_aPinObject[i].getStartPos().y, function () {
- });
- }
- };
- this.controlTurnResult = function (iPinDownTurn) {
- this.addBonusScoreToPreviousStage(iPinDownTurn);
-
- var oResult;
- if (!_bExtraTurn) {
- oResult = this.addScoreNormalTurns(iPinDownTurn);
- } else {
- oResult = this.addExtraScore(iPinDownTurn);
- }
- var bLastStage = false;
- _iScore += iPinDownTurn;
- if (_iStage !== 9) {
- _aScoreStage[_iStage][_iTurn - 1] = iPinDownTurn;
- _aScoreStage[_iStage][2] += iPinDownTurn;
- _oInterface.refreshTurnsBoard(_iStage, _iTurn, _aScoreStage[_iStage][2], oResult.point, bLastStage);
- } else {
- _aScoreStage[_iStage][_iTurn - 1] = iPinDownTurn;
- _aScoreStage[_iStage][3] += iPinDownTurn;
- bLastStage = true;
- _oInterface.refreshTurnsBoard(_iStage, _iTurn, _aScoreStage[_iStage][3], oResult.point, bLastStage);
- }
-
- if(_iStage !== 9){
- if(_bStrike){
- _aScoreStageStrikeCounter[_iStage] += 2;
- }
- if(_bSpare){
- _aScoreStageStrikeCounter[_iStage] += 1;
- }
- }
- if (oResult.next) {
- this.nextTurn();
- if (_iPinDown < _aPinObject.length) {
- _oPinBinder.setVisible(true);
-
- if(_iTurn<4 ){
- _oPinBinder.takeRemainPinsAndRepos();
- }
-
- _oScene.getPinsBinder().collisionResponse = 1;
- _bRepositionTurn = true;
- } else {
- _iPinDown = 0;
- }
- } else {
- if (_iStage !== 9) {
- _iPinDown = 0;
- _iStage++;
- _iTurn = 1;
- _oInterface.setStateTurnBoard(_iStage, "on");
- } else {
- this.gameOver();
- }
- }
- _oInterface.refresTotalBoard(_iScore);
- _iPinDownTurn = 0;
- _bChannelCol = false;
- _bPinCollision = false;
- _bHitFloor = false;
- _bStrike = false;
- _bSpare = false;
- };
- this.gameOver = function () {
- _iGameState = STATE_FINISH;
- _oInterface.createEndPanel(_iScore);
- };
- this.addExtraScore = function (iPinDownTurn) {
- var oResult = {next: true, point: iPinDownTurn};
- if (iPinDownTurn >= _aPinObject.length) { //STRIKE
- if (_bExtraTurn) {
- oResult = this.strikeResult();
- } else if (_iTurn === 2 && _bExtraTurn) {
- oResult = this.spareResult();
- }
- } else if (iPinDownTurn < _aPinObject.length) { //ARITMETIC ADDICTION
- oResult = this.aritmeticResult(iPinDownTurn);
- }
- return oResult;
- };
- this.addScoreNormalTurns = function (iPinDownTurn) {
- var oResult = {next: true, point: iPinDownTurn};
- if (_iPinDown === _aPinObject.length) { //STRIKE
- if (_iTurn === 1 && !_bExtraTurn) {
- oResult = this.strikeResult();
- } else if (_iTurn === 2 && !_bExtraTurn) {
- oResult = this.spareResult();
- }
- } else if (_iPinDown < _aPinObject.length && _iTurn === 2) { //ARITMETIC ADDICTION
- oResult = this.aritmeticResult(iPinDownTurn);
- }
- return oResult;
- };
- this.aritmeticResult = function (iPinDownTurn) {
- this.pinBinderAction();
- return {next: _bExtraTurn, point: iPinDownTurn};
- };
- this.spareResult = function () {
- var szPoint, bNextTurn = false;
- _bSpare = true;
- if (_iStage === 9) {
- _bExtraTurn = true;
- bNextTurn = true;
- }
- this.pinBinderAction();
- _bAnimSpare = true;
- playSound("gingle_spare", 1, false);
- _oAnimMonitor.setVisibleMonitorSpare(true);
- szPoint = "/";
- return {next: bNextTurn, point: szPoint};
- };
- this.strikeResult = function () {
- var szPoint, bNextTurn = false;
- _bStrike = true;
- _oAnimMonitor.setVisibleMonitorStrike(true);
- _bAnimStrike = true;
- playSound("gingle_strike", 1, false);
- szPoint = "X";
- if (_iStage === 9) {
- _bExtraTurn = true;
- bNextTurn = true;
- }
- this.pinBinderAction();
- return {next: bNextTurn, point: szPoint};
- };
- this.nextTurn = function () {
- if (_bExtraTurn) {
- if (_iTurn === 3) {
- this.gameOver();
- }
- } else if (_iStage === 9 && _iTurn === 2) {
- this.gameOver();
- }
- _iTurn++;
- };
- this.addBonusScoreToPreviousStage = function(iPinDownTurn){
- for (var i = 0; i < LAUNCH_TURN; i++) {
- if(_aScoreStageStrikeCounter[i]>0){
- _aScoreStageStrikeCounter[i]--;
- _aScoreStage[i][2] += iPinDownTurn;
-
- _iScore += iPinDownTurn;
-
- _oInterface.refreshTurnsBoard(i, null, _aScoreStage[i][2], null);
- }
- }
- };
- this.activeControl = function () {
- _oSemaphore.changeState("green");
- _bLaunched = false;
- _oInterface.dirArrowsVisibility(true);
- _oCharacter.setPosition(CHARACTER_START_POS.x, CHARACTER_START_POS.y);
- _oCharacter.animFade(1);
- _oCharacter.setVisible(true);
- };
- this.countPinDown = function () {
- var iPinDown = _iPinDownTurn;
- for (var i = 0; i < _aPinObject.length; i++) {
- if (!_aPinObject[i].isDownYet()) {
- var oVec3 = new CANNON.Vec3();
- _aPinObject[i].getPhysics().quaternion.toEuler(oVec3);
- oVec3.x = Math.ceil(Math.degrees(oVec3.x));
- oVec3.y = Math.ceil(Math.degrees(oVec3.y));
- oVec3.z = Math.ceil(Math.degrees(oVec3.z));
- if (oVec3.x > 20 || oVec3.x < -20 || oVec3.y > 20 || oVec3.y < -20 || _aPinObject[i].getPhysics().position.z < _oTrack.getHeightPos()) {
- iPinDown++;
- _aPinObject[i].setDown(true);
- }
- }
- }
- return iPinDown;
- };
- this.animUpRemainPins = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- if (!_aPinObject[i].isDownYet()) {
- _aPinObject[i].animTake(_aPinObject[i].getStartPos().y - 100);
- }
- }
- };
- this.repositionRemainPins = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- if (!_aPinObject[i].isDownYet()) {
- _aPinObject[i].getPhysics().position.set(PINS_POSITION[i].x, PINS_POSITION[i].y, PINS_POSITION[i].z);
- _aPinObject[i].getPhysics().quaternion.setFromEuler(0, 0, 0, 'XYZ');
- _aPinObject[i].getPhysics().angularVelocity.set(0, 0, 0);
- _aPinObject[i].getPhysics().velocity.set(0, 0, 0);
- _aPinObject[i].getPhysics().mass = PIN_PROPERTY.mass;
- _aPinObject[i].setPosition(_aPinObject[i].getStartPos().x, _aPinObject[i].getStartPos().y - 100);
- _aPinObject[i].setPlayedSound(false);
- var fAlpha = this.pinReflection(i, _aPinObject[i].getPhysics().position);
- _aPinObject[i].setAlphaByHeight(0);
- _aPinObject[i].animReposition(_aPinObject[i].getStartPos().y, fAlpha);
- var oPos2DPin = this.convert3dPosTo2dScreen(_aPinObject[i].getPhysics().position, _oCamera);
- this.pinScale(i, oPos2DPin);
- _aPinObject[i].setVisible(true);
- _aPinObject[i].pinRotation();
- } else {
- _aPinObject[i].setVisible(false);
- }
- }
- _bRepositionTurn = false;
- };
- this.unload = function () {
- s_oStage.removeAllChildren();
- _oInterface.unload();
- _oScene.destroyWorld();
- _oScene = null;
- };
- this.addImpulseToBall = function (fForceY) {
- if (_iGameState !== STATE_PLAY) {
- return;
- }
- _oScene.ballBody().mass = BALL_MASS;
- var fX = 0;
- var fZ = 0;
- var oDir = {x: fX, y: fForceY, z: fZ};
- var oBall = _oScene.ballBody();
- _oScene.addImpulse(oBall, oDir);
- _oScene.setElementAngularVelocity(oBall, {x: 0, y: 0, z: 0});
- _bLaunched = true;
- _oSemaphore.changeState("red");
- };
- this.pause = function (bVal) {
- if (bVal) {
- _iGameState = STATE_PAUSE;
- } else {
- _iGameState = STATE_PLAY;
- }
- createjs.Ticker.paused = bVal;
- };
- this.setPinDown = function (iID, bVal, iWhere) {
- if (_aPinObject[iID].isDownYet() === bVal || _bRepositionTurn) {
- return;
- }
- if (iWhere === WALL && !_aPinObject[iID].isDownYet()) {
- _aPinObject[iID].setVisibleRef(false);
- } else if (iWhere === SIDE_PINS_FLOOR) {
- _aPinObject[iID].setPosRef(_oScene.getSideFloorPins(0).position.z);
- }
- _aPinObject[iID].setDown(bVal);
- if (bVal) {
- _iPinDownTurn++;
- } else {
- _iPinDownTurn--;
- }
- };
- this.onExit = function () {
- this.unload();
- $(s_oMain).trigger("end_level");
- $(s_oMain).trigger("show_interlevel_ad");
- $(s_oMain).trigger("end_session", _iScore);
- console.log("score: " + _iScore);
- fadeSound(0,1,MS_FADE_SOUNDTRACK,"soundtrack");
- stopSound("ambience");
- s_oMain.gotoMenu();
- };
- this.restartGame = function () {
- this.resetValues();
- this.resetScene();
- _iGameState = STATE_PLAY;
- $(s_oMain).trigger("restart_level", 1);
- };
- this.resetValues = function () {
- _iStage = 0;
- _iScore = 0;
- _iPinDown = 0;
- _iPinDownTurn = 0;
- _iTurn = 1;
- _bLaunched = false;
- _bWallCollision = false;
- _bDetectPinMovement = false;
- _bPressedKeys = false;
- _bSpare = false;
- _bStrike = false;
- _bKeyDir = false;
- _bPinCollision = false;
- _bAnimStrike = false;
- _bHitFloor = false;
- _bAnimSpare = false;
- _bAnimGutter = false;
- _bChannelCol = false;
- _bRepositionTurn = false;
- _bPhysicsPinsDepends = true;
- _bPlayCharacter = false;
- _bExtraTurn = false;
- this.resetScoreStageArray();
- for (var i = 0; i < LAUNCH_TURN - 1; i++) {
- for (var j = 0; j < 2; j++) {
- if (j === 0) {
- _oInterface.refreshTurnsBoard(i, j + 1, _iScore, 0, false);
- } else {
- _oInterface.refreshTurnsBoard(i, j + 1, _iScore, "", false);
- }
- _oInterface.setStateTurnBoard(i, "off");
- }
- }
- for (var j = 0; j < 3; j++) {
- if (j === 0) {
- _oInterface.refreshTurnsBoard(LAUNCH_TURN - 1, j + 1, _iScore, 0, true);
- } else {
- _oInterface.refreshTurnsBoard(LAUNCH_TURN - 1, j + 1, _iScore, "", true);
- }
- _oInterface.setStateTurnBoard(LAUNCH_TURN - 1, "off");
- }
- _oInterface.setStateTurnBoard(0, "on");
- _oInterface.refresTotalBoard(0);
-
- _oAnimMonitor.disableRunningMonitor();
- };
- this.resetBallPosition = function () {
- var oBallBody = _oScene.ballBody();
- oBallBody.mass = 0;
- oBallBody.position.set(POSITION_BALL.x, POSITION_BALL.y, POSITION_BALL.z);
- _oScene.setElementVelocity(oBallBody, {x: 0, y: 0, z: 0});
- _oScene.setElementAngularVelocity(oBallBody, {x: 0, y: 0, z: 0});
- _oBall.setPlayedSound(false);
- };
- this._updateInit = function () {
- _oScene.update();
- this._updateBall2DPosition();
- _iGameState = STATE_PLAY;
- };
- this.convert2dScreenPosTo3d = function (oPos2d, oBody) {
- var iWidth = (s_iCanvasResizeWidth);
- var iHeight = (s_iCanvasResizeHeight);
- var mouse3D = new THREE.Vector3((oPos2d.x / iWidth) * 2 - 1, //x
- -(oPos2d.y / iHeight) * 2 + 1, //y
- -1); //z
- mouse3D.unproject(_oCamera);
- mouse3D.sub(_oCamera.position);
- mouse3D.normalize();
- var fFactor = oBody.position.y;
- mouse3D.multiply(new THREE.Vector3(fFactor, 1, fFactor));
- return mouse3D;
- };
- this.convert3dPosTo2dScreen = function (pos, oCamera) {
- var v3 = new THREE.Vector3(pos.x, pos.y, pos.z);
- var vector = v3.project(oCamera);
- var widthHalf = Math.floor(s_iCanvasResizeWidth) * 0.5;
- var heightHalf = Math.floor(s_iCanvasResizeHeight) * 0.5;
- vector.x = ((vector.x * widthHalf) + widthHalf) * s_fInverseScaling;
- vector.y = (-(vector.y * heightHalf) + heightHalf) * s_fInverseScaling;
- return vector;
- };
- this.resetScene = function () {
- this.resetPinsPosition();
- this.resetBallPosition();
- };
- this.resetPinsPosition = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- var oPinBody = _aPinObject[i].getPhysics();
- oPinBody.position.set(PINS_POSITION[i].x, PINS_POSITION[i].y, PINS_POSITION[i].z);
- oPinBody.quaternion.setFromEuler(0, 0, 0, 'XYZ');
- oPinBody.angularVelocity.set(0, 0, 0);
- oPinBody.velocity.set(0, 0, 0);
- oPinBody.collisionResponse = 1;
- oPinBody.mass = PIN_PROPERTY.mass;
- _aPinObject[i].setPosRef(_oScene.getTrackBody().position.z);
- var oPos2DPin = this.convert3dPosTo2dScreen(oPinBody.position, _oCamera);
- this.pinScale(i, oPos2DPin);
- _aPinObject[i].setDown(false);
- _aPinObject[i].setVisible(true);
- _aPinObject[i].setPlayedSound(false);
- _aPinObject[i].setVisibleRef(true);
- }
- };
- this._onEnd = function () {
- this.onExit();
- };
- this.swapChildrenIndex = function () {
- for (var i = 0; i < _aObjects.length - 1; i++) {
- for (var j = i + 1; j < _aObjects.length; j++) {
- if (_aObjects[i].getObject().visible && _aObjects[j].getObject().visible)
- this.sortDepth(_aObjects[i], _aObjects[j]);
- }
- }
- };
- this.updatePinsPosition = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- if (_aPinObject[i].getVisible()) {
- var oPos = this.pinPosition(i);
- var fScale = this.pinScale(i, oPos);
- if (_aPinObject[i].isVisibleRef)
- this.pinReflection(i, _aPinObject[i].getPhysics().position);
- this.pinFade(i);
- if (!PIN_TEST)
- _aPinObject[i].pinRotation();
- }
- }
- };
- this.pinFade = function (i) {
- if (_aPinObject[i].getPhysics().position.y < _oTrack.getDepthPos()) {
- var fFade = 1 - (_aPinObject[i].getPhysics().position.y - _oTrack.getDepthPos()) * (FADE_PIN_FACTOR - _oTrack.getDepthPos());
- _aPinObject[i].setAlpha(fFade);
- }
- };
- this.pinScale = function (iID, oPos2DPin) {
- var fScaleDistance = oPos2DPin.z * (PIN_SCALE_FACTOR - _aPinObject[iID].getStartScale()) + _aPinObject[iID].getStartScale();
- _aPinObject[iID].scale(fScaleDistance);
- return fScaleDistance;
- };
- this.pinReflection = function (iID, oPosBody) {
- if (oPosBody.y < _oTrack.getDepthPos()) {
- fAlpha = 0;
- _aPinObject[iID].setAlphaByHeight(fAlpha);
- return;
- }
- var oPosRef = {x: oPosBody.x, y: oPosBody.y, z: _aPinObject[iID].getPosRef()};
- var oPos2dReflection = this.convert3dPosTo2dScreen(oPosRef, _oCamera);
- var fDistance = (oPosBody.z) + _oScene.getTrackBody().position.z;
- var fAlpha = fDistance * (PIN_ALPHA_FACTOR - 1) + 1;
- if (fAlpha > PINS_REFLECTION_LIMIT) {
- fAlpha = PINS_REFLECTION_LIMIT;
- }
- var fRegYRef = fDistance * (PIN_REF_REGY_FACTOR - _aPinObject[iID].getRegYRef()) + _aPinObject[iID].getRegYRef();
- _aPinObject[iID].setRegYRef(fRegYRef);
- _aPinObject[iID].setAlphaByHeight(fAlpha);
- _aPinObject[iID].setPositionReflection(oPos2dReflection.x, oPos2dReflection.y);
- return fAlpha;
- };
- this.setPinCollide = function () {
- _bPinCollision = true;
- };
- this.pinPosition = function (iID) {
- var oPinBody = _aPinObject[iID].getPhysics();
- var oPos2DPin = this.convert3dPosTo2dScreen(oPinBody.position, _oCamera);
- _aPinObject[iID].setPosition(oPos2DPin.x, oPos2DPin.y);
- return oPos2DPin;
- };
- this.movementKeyDown = function () {
- if (_bKeyDir) {
- if (_fTimeRefreshDirection < 0) {
- _fTimeRefreshDirection = TIME_REFRESH_DIRECTION;
- _oDirFunc();
- } else {
- _fTimeRefreshDirection -= FPS_TIME;
- }
- }
- };
- this.pinsMovementDetect = function () {
- if (!_bDetectPinMovement) {
- return;
- }
- var iPinMovement = _aPinObject.length;
- for (var i = 0; i < _aPinObject.length; i++) {
- var oVelocity = _aPinObject[i].getPhysics().velocity;
- if (Math.abs(oVelocity.x) < MIN_VELOCITY_PINS && Math.abs(oVelocity.y) < MIN_VELOCITY_PINS) {
- s_oScenario.setElementVelocity(_aPinObject[i].getPhysics(), {x: 0, y: 0, z: 0});
- iPinMovement--;
- }
- }
- if (iPinMovement === 0) {
- this.onStopAllPin();
- _bDetectPinMovement = false;
- } else if (_fTimeResetLaunch < 0) {
- this.stopAllPin();
- this.onStopAllPin();
- _bDetectPinMovement = false;
- } else {
- _fTimeResetLaunch -= FPS_TIME;
- }
- };
- this.gutterBall = function () {
- if (!_bChannelCol && !_bPinCollision) {
- _bAnimGutter = true;
- _oAnimMonitor.setVisibleMonitorGutter(true);
- _bChannelCol = true;
- playSound("gingle_gutterball", 1, false);
- }
- };
- this.stopAllPin = function () {
- for (var i = 0; i < _aPinObject.length; i++) {
- s_oScenario.setElementVelocity(_aPinObject[i].getPhysics(), {x: 0, y: 0, z: 0});
- }
- };
- this.pinTest = function () {
- _aPinObject[_aPinObject.length - 1].pinRotation();
- console.log(_aPinObject[_aPinObject.length - 1].getPhysics().position);
- };
- this.animMonitor = function () {
- if (_bAnimStrike) {
- _bAnimStrike = _oAnimMonitor.animMonitor(_oAnimMonitor.getStrikeArray());
- } else if (_bAnimSpare) {
- _bAnimSpare = _oAnimMonitor.animMonitor(_oAnimMonitor.getSpareArray());
- } else if (_bAnimGutter) {
- _bAnimGutter = _oAnimMonitor.animMonitor(_oAnimMonitor.getGutterArray());
- if (!_bAnimGutter) {
- this.completeLaunch();
- }
- }
- };
- this.pinSoundCollision = function (iID) {
- _aPinObject[iID].playAudio();
- };
- this.twoPinsSoundCollision = function (iID1, iID2) {
- createjs.Tween.get(this).wait(Math.floor(Math.random() * 50)).call(function () {
- _aPinObject[iID1].playAudio();
- });
- createjs.Tween.get(this).wait(Math.floor(Math.random() * 50)).call(function () {
- _aPinObject[iID2].playAudio();
- });
- };
- this.ballHitFloor = function () {
- if (_bHitFloor) {
- return;
- }
- _bHitFloor = true;
- playSound("ball_hitting", 1, false);
- };
- this.channelForceApply = function () {
- if (!_bChannelCol) {
- return;
- }
- if (_oScene.ballBody().velocity.y > MIN_FORCE_BALL_GUTTER) {
- _oScene.ballBody().applyForce({x: 0, y: -100, z: 0}, new CANNON.Vec3(0, 0, 0));
- }
- };
- this.characterAnimation = function () {
- if (_bPlayCharacter) {
- _bPlayCharacter = _oCharacter.animCharacter();
- if (_oCharacter.getFrame() === 24) {
- this.launchBall();
- }
- }
- };
- this._updatePlay = function () {
- for (var i = 0; i < PHYSICS_ACCURACY; i++) {
- _oScene.update();
- this.awakePins();
- }
- this._updateBall2DPosition();
- if (_bPhysicsPinsDepends)
- this.updatePinsPosition();
- this.swapChildrenIndex();
- this.movementKeyDown();
- this.pinsMovementDetect();
- this.channelForceApply();
- this.characterAnimation();
- if (PIN_TEST)
- this.pinTest();
- this.animMonitor();
- };
- this.update = function () {
- switch (_iGameState) {
- case STATE_INIT:
- {
- this._updateInit();
- }
- break;
- case STATE_PLAY:
- {
- this._updatePlay();
- }
- break;
- case STATE_FINISH:
- _oScene.update();
- this.animMonitor();
- if (_bPhysicsPinsDepends)
- this.updatePinsPosition();
- break;
- case STATE_PAUSE:
- break;
- }
- };
- this._updateBall2DPosition = function () {
- this.ballPosition();
- _oCamera.updateProjectionMatrix();
- _oCamera.updateMatrixWorld();
- };
- s_oGame = this;
- TIME_POWER_BAR = oData.time_power_bar;
- SPEED_EFFECT_ARROW = oData.speed_effect_arrow;
- NUM_LEVEL_FOR_ADS = oData.num_levels_for_ads;
-
- this._init();
- }
- var s_oGame;
|