diff --git a/app/Game/Client/Control/Input/MouseInput.js b/app/Game/Client/Control/Input/MouseInput.js new file mode 100644 index 0000000..493c901 --- /dev/null +++ b/app/Game/Client/Control/Input/MouseInput.js @@ -0,0 +1,38 @@ +define([ + "Game/Client/Control/Input/XyInput", + "Game/Client/View/DomController", + "Game/Config/Settings" +], + +function (Parent, DomController, Settings) { + + function MouseInput() { + Parent.call(this); + + this.init(); + } + + MouseInput.prototype = Object.create(Parent.prototype); + + MouseInput.prototype.init = function() { + + var canvas = null; + var self = this; + canvas = DomController.getCanvas(); + + canvas.onmousemove = function(e){ + + // -1 +1 +1 +1 xy scaling should + // -1 -1 +1 -1 be like this + + var x = (((e.clientX - this.offsetLeft) / Settings.STAGE_WIDTH) * 2) - 1; + var y = (((Settings.STAGE_HEIGHT - (e.clientY - this.offsetTop)) / Settings.STAGE_HEIGHT) * 2) -1; + + self.onXyChange(x, y); + } + }; + + + return MouseInput; + +}); diff --git a/app/Game/Client/Control/Input/XyInput.js b/app/Game/Client/Control/Input/XyInput.js new file mode 100644 index 0000000..e02a71d --- /dev/null +++ b/app/Game/Client/Control/Input/XyInput.js @@ -0,0 +1,22 @@ +define([ + "Game/Core/NotificationCenter" +], + +function (NotificationCenter) { + + function XyInput() { + this.x = null; + this.y = null + } + + XyInput.prototype.onXyChange = function(x, y) { + this.x = x; + this.y = y; + NotificationCenter.trigger('onXyChange', x, y); + } + + + + return XyInput; + +}); \ No newline at end of file diff --git a/app/Game/Client/Control/PlayerController.js b/app/Game/Client/Control/PlayerController.js index 1f6fe48..1537e2f 100755 --- a/app/Game/Client/Control/PlayerController.js +++ b/app/Game/Client/Control/PlayerController.js @@ -1,16 +1,20 @@ define([ "Game/Core/Control/PlayerController", "Game/Client/Control/KeyboardInput", + "Game/Client/Control/Input/MouseInput", "Game/Core/NotificationCenter" ], -function (Parent, KeyboardInput, NotificationCenter) { +function (Parent, KeyboardInput, MouseInput, NotificationCenter) { function PlayerController (me) { Parent.call(this, me); this.keyboardInput = new KeyboardInput(this); + this.xyInput = new MouseInput(this); + + NotificationCenter.on("onXyChange", this.setXY, this); var keys = { w:87, @@ -21,7 +25,7 @@ function (Parent, KeyboardInput, NotificationCenter) { up: 38, left: 37, down: 40, - right: 39 + right: 39 } this.init(keys); @@ -61,10 +65,17 @@ function (Parent, KeyboardInput, NotificationCenter) { NotificationCenter.trigger('sendGameCommand', 'jump'); } + PlayerController.prototype.setXY = function(x, y) { + Parent.prototype.lookAt.call(this, x, y); + NotificationCenter.trigger('sendGameCommand', 'lookAt', x, y); // implement that x and y are received + }; + PlayerController.prototype.update = function () { this.keyboardInput.update(); Parent.prototype.update.call(this); } + + return PlayerController; }); \ No newline at end of file diff --git a/app/Game/Client/GameController.js b/app/Game/Client/GameController.js index 10a772d..de1ac33 100755 --- a/app/Game/Client/GameController.js +++ b/app/Game/Client/GameController.js @@ -13,10 +13,12 @@ define([ function (Parent, Box2D, PhysicsEngine, ViewController, PlayerController, NotificationCenter, requestAnimFrame, Settings, Stats) { function GameController () { - this.viewController = new ViewController(); + Parent.call(this, new PhysicsEngine()); + this.viewController = new ViewController(); + this.physicsEngine.setCollisionDetector(); this.me = null; diff --git a/app/Game/Client/View/ViewController.js b/app/Game/Client/View/ViewController.js index 23beee7..9d34b0c 100755 --- a/app/Game/Client/View/ViewController.js +++ b/app/Game/Client/View/ViewController.js @@ -54,9 +54,11 @@ define(requires, function (DomController, Three, Settings, CameraController) { this.scene.add(this.cameraController.getCamera()); - var ambientLight = new Three.AmbientLight(0xffffff); + var ambientLight = new Three.AmbientLight(0xffaaaa); this.scene.add(ambientLight); + + //var directionalLight = new Three.DirectionalLight(0xffffff); //directionalLight.position.set(1, 0, 10).normalize(); //this.scene.add(directionalLight); @@ -105,13 +107,19 @@ define(requires, function (DomController, Three, Settings, CameraController) { ViewController.prototype.render = function () { if(this.me) { - var pos = this.me.getDoll().getBody().GetPosition(); - this.cameraController.setPosition(pos.x * Settings.RATIO, -(pos.y * Settings.RATIO)); + var pos = this.me.getPosition(); + var x = pos.x * Settings.RATIO; + var y = -(pos.y * Settings.RATIO); + + x += this.me.playerController.xyInput.x * Settings.STAGE_WIDTH / 4; + y += this.me.playerController.xyInput.y * Settings.STAGE_HEIGHT / 4; + + this.cameraController.setPosition(x, y); } for (var i = 0; i < this.movableObjects.length; i++) { var obj = this.movableObjects[i]; - var pos = obj.player.getDoll().getBody().GetPosition(); + var pos = obj.player.getPosition(); obj.mesh.position.x = pos.x * Settings.RATIO; obj.mesh.position.y = -pos.y * Settings.RATIO + 21; } @@ -141,7 +149,7 @@ define(requires, function (DomController, Three, Settings, CameraController) { ViewController.prototype.addPlayer = function(player) { var self = this; var mesh = null; - var pos = player.getDoll().getBody().GetPosition(); + var pos = player.getPosition(); var size = {w:10, h:42}; var callback = function(mesh) { self.scene.add(mesh); diff --git a/app/Game/Config/Settings.js b/app/Game/Config/Settings.js index 67bfeef..5737e14 100755 --- a/app/Game/Config/Settings.js +++ b/app/Game/Config/Settings.js @@ -16,12 +16,12 @@ define({ GRAPHICS_SUBPATH_CHARACTERS: 'characters/', RATIO: 35, - TILE_SIZE: 15, + TILE_SIZE: 40, //15 CAMERA_IS_ORTHOGRAPHIC: true, // GAME PLAY WALK_SPEED: 2.5, - RUN_SPEED: 4.0, + RUN_SPEED: 4, FLY_SPEED: 3.2, JUMP_SPEED: 4.0, JUMP_UPLIFT: 0.05, diff --git a/app/Game/Core/Control/PlayerController.js b/app/Game/Core/Control/PlayerController.js index b940648..d81ab4a 100755 --- a/app/Game/Core/Control/PlayerController.js +++ b/app/Game/Core/Control/PlayerController.js @@ -29,6 +29,10 @@ define(function () { this.player.jump(); } + PlayerController.prototype.lookAt = function (x, y) { + this.player.lookAt(x, y); + } + PlayerController.prototype.update = function () { //console.log(this._walkingDirectionStatus) if(this._walkingDirectionStatus != 0) { diff --git a/app/Game/Core/Player.js b/app/Game/Core/Player.js index 43da7b1..e16851e 100755 --- a/app/Game/Core/Player.js +++ b/app/Game/Core/Player.js @@ -7,15 +7,16 @@ function (Doll, Settings) { function Player (id, physicsEngine) { this.physicsEngine = physicsEngine; + this.playerController = null; + this.id = id; this.standing = false; this.doll; - this.mc; this.currentAnimationState = 'stand'; - this.lookDirection = 1; this.moveDirection = 0; + this.lookDirection = 0; this.isSpawned = false; - this.playerController = null; + } Player.prototype.spawn = function (x, y) { @@ -113,17 +114,20 @@ function (Doll, Settings) { } Player.prototype.calculateWalkAnimation = function () { - if (this.moveDirection == this.lookDirection) { + // FIXME dont know if this is right + if (this.moveDirection == (this.lookDirection > 0)) { return 'run'; } return 'walkback'; } - Player.prototype.look = function (x, y) { - /* - var degree = Math.atan2(Settings.STAGE_WIDTH / 2 - x, Settings.STAGE_HEIGHT / 2 - 25 - y) / (Math.PI / 180); + Player.prototype.lookAt = function (x, y) { + //console.log("player looking at ", x, y); + + var lastLookDirection = this.lookDirection; - +/* + var degree = Math.atan2(Settings.STAGE_WIDTH / 2 - x, Settings.STAGE_HEIGHT / 2 - 25 - y) / (Math.PI / 180); if (x < Settings.STAGE_WIDTH / 2) { this.mc.scaleX = -1; this.lookDirection = -1; @@ -135,10 +139,17 @@ function (Doll, Settings) { degree = (45 + -degree / 2) - 90; this.mc.head.rotation = degree; } + */ + + if(x < 0) { + this.lookDirection = -1; + } else { + this.lookDirection = 1; + } if (this.lookDirection != lastLookDirection && this.isWalking()) { this.animate(this.calculateWalkAnimation()); - }*/ + } } Player.prototype.isWalking = function () { diff --git a/lab/client.js b/lab/client.js index 8d7a42f..591548e 100755 --- a/lab/client.js +++ b/lab/client.js @@ -1,3 +1,5 @@ +GLOBALS = { context: "Client" }; + requirejs.config({ baseUrl: 'app', deps: ['Lib/Utilities/Extensions']