diff --git a/wip/TS Tests/template_breakout/GameState.js b/wip/TS Tests/template_breakout/GameState.js new file mode 100644 index 00000000..aefe3f6e --- /dev/null +++ b/wip/TS Tests/template_breakout/GameState.js @@ -0,0 +1,151 @@ +/// +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BasicGame; +(function (BasicGame) { + var GameState = (function (_super) { + __extends(GameState, _super); + function GameState() { + _super.apply(this, arguments); + } + GameState.prototype.create = function () { + this.game.world.height = 620; + + this._ballOnPaddle = true; + this._score = 0; + this._lives = 3; + + this._s = this.game.add.tileSprite(0, 0, 800, 600, "starfield"); + + var brick; + this._bricks = this.game.add.group(); + + for (var y = 0; y < 4; y++) { + for (var x = 0; x < 15; x++) { + brick = this._bricks.create(120 + (x * 36), 100 + (y * 52), "breakout", "brick_" + (y + 1) + "_1.png"); + brick.body.bounce.setTo(1, 1); + brick.body.immovable = true; + } + } + + this._paddle = this.game.add.sprite(this.game.world.centerX, 500, "breakout", "paddle_big.png"); + this._paddle.anchor.setTo(0.5, 0.5); + this._paddle.body.collideWorldBounds = true; + this._paddle.body.bounce.setTo(1, 1); + this._paddle.body.immovable = true; + + this._ball = this.game.add.sprite(this.game.world.centerX, this._paddle.y - 16, "breakout", 'ball_1.png'); + this._ball.anchor.setTo(0.5, 0.5); + this._ball.body.collideWorldBounds = true; + + this._ball.body.bounce.setTo(1, 1); + this._ball.animations.add("spin", ["ball_1.png", "ball_2.png", "ball_3.png", "ball_4.png", "ball_5.png"], 50, true, false); + + this._scoreText = this.game.add.text(32, 550, "score: 0", { font: "20px Arial", fill: "#ffffff", align: "left" }); + this._livesText = this.game.add.text(680, 550, "lives: 3", { font: "20px Arial", fill: "#ffffff", align: "left" }); + this._introText = this.game.add.text(this.game.world.centerX, 400, "- click to start -", { font: "40px Arial", fill: "#ffffff", align: "center" }); + this._introText.anchor.setTo(0.5, 0.5); + + this.game.input.onDown.add(this.releaseBall, this); + + this._ballOnPaddle = true; + }; + + GameState.prototype.update = function () { + this._paddle.x = this.game.input.x; + + if (this._paddle.x < 24) { + this._paddle.x = 24; + } else if (this._paddle.x > this.game.width - 24) { + this._paddle.x = this.game.width - 24; + } + + if (this._ballOnPaddle) { + this._ball.x = this._paddle.x; + } else { + this.game.physics.collide(this._ball, this._paddle, this.ballHitPaddle, null, this); + this.game.physics.collide(this._ball, this._bricks, this.ballHitBrick, null, this); + } + + if (this._ball.y > 600 && this._ballOnPaddle == false) { + this.ballLost(); + } + }; + + GameState.prototype.quitGame = function (p_pointer) { + this.game.state.start("MainMenu"); + }; + + GameState.prototype.releaseBall = function () { + if (this._ballOnPaddle) { + this._ballOnPaddle = false; + this._ball.body.velocity.y = -300; + this._ball.body.velocity.x = -75; + this._ball.animations.play("spin"); + this._introText.visible = false; + } + }; + + GameState.prototype.ballLost = function () { + this._lives--; + + if (this._lives == 0) { + this.gameOver(); + } else { + this._livesText.content = "lives: " + this._lives; + this._ballOnPaddle = true; + this._ball.body.velocity.setTo(0, 0); + this._ball.x = this._paddle.x + 16; + this._ball.y = this._paddle.y - 16; + this._ball.animations.stop(); + } + }; + + GameState.prototype.gameOver = function () { + this._ball.body.velocity.setTo(0, 0); + + this.quitGame(); + }; + + GameState.prototype.ballHitBrick = function (p_ball, p_brick) { + p_brick.kill(); + + this._score += 10; + this._scoreText.content = "score: " + this._score; + + if (this._bricks.countLiving() == 0) { + this._score += 1000; + this._scoreText.content = "score: " + this._score; + this._introText.content = "- Next Level -"; + + this._ballOnPaddle = true; + this._ball.body.velocity.setTo(0, 0); + this._ball.x = this._paddle.x + 16; + this._ball.y = this._paddle.y - 16; + this._ball.animations.stop(); + + this._bricks.callAll('revive'); + } + }; + + GameState.prototype.ballHitPaddle = function (p_ball, p_paddle) { + var l_diff = 0; + + if (p_ball.x < p_paddle.x) { + l_diff = p_paddle.x - p_ball.x; + p_ball.body.velocity.x = (-10 * l_diff); + } else if (p_ball.x > p_paddle.x) { + l_diff = p_ball.x - p_paddle.x; + p_ball.body.velocity.x = (10 * l_diff); + } else { + p_ball.body.velocity.x = 2 + Math.random() * 8; + } + }; + return GameState; + })(Phaser.State); + BasicGame.GameState = GameState; +})(BasicGame || (BasicGame = {})); diff --git a/wip/TS Tests/template_breakout/GameState.ts b/wip/TS Tests/template_breakout/GameState.ts new file mode 100644 index 00000000..438a5caf --- /dev/null +++ b/wip/TS Tests/template_breakout/GameState.ts @@ -0,0 +1,184 @@ +/// + +module BasicGame +{ + export class GameState extends Phaser.State { + private _ball:Phaser.Sprite; + private _paddle:Phaser.Sprite; + private _bricks:Phaser.Group; + + private _ballOnPaddle:boolean; + + private _lives:number; + private _score:number; + + private _scoreText:Phaser.Text; + private _livesText:Phaser.Text; + private _introText:Phaser.Text; + + private _s:Phaser.TileSprite; + + create():void { + this.game.world.height = 620; + + this._ballOnPaddle = true; + this._score = 0; + this._lives = 3; + + this._s = this.game.add.tileSprite(0,0,800,600,"starfield"); + + var brick:Phaser.Sprite; + this._bricks = this.game.add.group(); + + for( var y=0; y < 4; y++ ) + { + for( var x=0; x < 15; x++) + { + brick = this._bricks.create(120 + ( x * 36 ), 100 + ( y * 52 ),"breakout","brick_" + ( y+1 ) + "_1.png"); + brick.body.bounce.setTo(1, 1); + brick.body.immovable = true; + } + } + + this._paddle = this.game.add.sprite( this.game.world.centerX, 500, "breakout", "paddle_big.png"); + this._paddle.anchor.setTo(0.5,0.5); + this._paddle.body.collideWorldBounds = true; + this._paddle.body.bounce.setTo(1,1); + this._paddle.body.immovable = true; + + this._ball = this.game.add.sprite( this.game.world.centerX, this._paddle.y - 16, "breakout",'ball_1.png'); + this._ball.anchor.setTo(0.5,0.5); + this._ball.body.collideWorldBounds = true; + + this._ball.body.bounce.setTo(1,1); + this._ball.animations.add("spin", ["ball_1.png", "ball_2.png", "ball_3.png", "ball_4.png", "ball_5.png" ], 50, true, false); + + this._scoreText = this.game.add.text(32, 550, "score: 0", {font: "20px Arial", fill: "#ffffff", align: "left" }); + this._livesText = this.game.add.text(680, 550, "lives: 3", {font: "20px Arial", fill: "#ffffff", align: "left" }); + this._introText = this.game.add.text(this.game.world.centerX, 400, "- click to start -", {font: "40px Arial", fill: "#ffffff", align: "center" }); + this._introText.anchor.setTo(0.5,0.5); + + this.game.input.onDown.add( this.releaseBall, this ); + + this._ballOnPaddle = true; + + } + + update():void + { + this._paddle.x = this.game.input.x; + + if( this._paddle.x < 24 ) + { + this._paddle.x = 24; + } + else if( this._paddle.x > this.game.width - 24 ) + { + this._paddle.x = this.game.width - 24; + } + + if( this._ballOnPaddle ) + { + this._ball.x = this._paddle.x; + } + else + { + this.game.physics.collide( this._ball, this._paddle, this.ballHitPaddle, null, this ); + this.game.physics.collide( this._ball, this._bricks, this.ballHitBrick, null, this ); + } + + if( this._ball.y > 600 && this._ballOnPaddle == false ) + { + this.ballLost(); + } + } + + private quitGame( p_pointer?:any ):void + { + this.game.state.start("MainMenu"); + } + + private releaseBall():void + { + if( this._ballOnPaddle ) + { + this._ballOnPaddle = false; + this._ball.body.velocity.y = -300; + this._ball.body.velocity.x = -75; + this._ball.animations.play("spin"); + this._introText.visible = false; + } + } + + private ballLost():void + { + this._lives--; + + if( this._lives == 0) + { + this.gameOver(); + } + else + { + this._livesText.content = "lives: " + this._lives; + this._ballOnPaddle = true; + this._ball.body.velocity.setTo(0,0); + this._ball.x = this._paddle.x + 16; + this._ball.y = this._paddle.y - 16; + this._ball.animations.stop(); + } + } + + private gameOver():void + { + this._ball.body.velocity.setTo(0,0); + + this.quitGame(); + } + + private ballHitBrick( p_ball:Phaser.Sprite, p_brick:Phaser.Sprite ):void + { + p_brick.kill(); + + this._score += 10; + this._scoreText.content = "score: " + this._score; + + if( this._bricks.countLiving() == 0 ) + { + this._score += 1000; + this._scoreText.content = "score: " + this._score; + this._introText.content = "- Next Level -"; + + this._ballOnPaddle = true; + this._ball.body.velocity.setTo(0,0); + this._ball.x = this._paddle.x + 16; + this._ball.y = this._paddle.y - 16; + this._ball.animations.stop(); + + this._bricks.callAll('revive'); + } + + + } + + private ballHitPaddle( p_ball:Phaser.Sprite, p_paddle:Phaser.Sprite ):void + { + var l_diff:number = 0; + + if( p_ball.x < p_paddle.x ) + { + l_diff = p_paddle.x - p_ball.x; + p_ball.body.velocity.x = (-10 * l_diff); + } + else if( p_ball.x > p_paddle.x ) + { + l_diff = p_ball.x - p_paddle.x; + p_ball.body.velocity.x = (10 * l_diff); + } + else + { + p_ball.body.velocity.x = 2 + Math.random() * 8; + } + } + } +} \ No newline at end of file