From b1587926ab3bf9bfb7f5e56f5723ef6b91dc97a8 Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Thu, 26 Jun 2014 07:54:27 -0700 Subject: [PATCH] #3 : Hunting behavior partially implemented, character wanders around inside a box looking for the player. Needs to stop/turn, and for some reason the state never ends. --- moonlight/src/AISprite.js | 23 ++++++++++++++++++++++- moonlight/src/Constants.js | 7 +++++-- moonlight/src/main.js | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/moonlight/src/AISprite.js b/moonlight/src/AISprite.js index 2bc0cae..2620b2d 100644 --- a/moonlight/src/AISprite.js +++ b/moonlight/src/AISprite.js @@ -461,7 +461,26 @@ var AISprite = function(game, x, y, key, frame) { this.action_huntplayer = function() { console.log("I AM HUNTING FOR THE PLAYER"); - setSpriteMovement(this); + if ( this.path.length < 1 || + this.path_index >= this.path.length ) { + var curmap = game.state.states.game.map; + var intgridx = parseInt(this.state_changed_at.x/32); + var intgridy = parseInt(this.state_changed_at.y/32); + var boundleft = Math.max(0, (intgridx - this.hunt_radius)); + var boundtop = Math.max(0, (intgridy - this.hunt_radius)); + var boundright = Math.min(curmap.width, (intgridx + this.hunt_radius)); + var boundbottom = Math.min(curmap.height, (intgridy + this.hunt_radius)); + var destx = game.rnd.integerInRange(boundleft, boundright); + var desty = game.rnd.integerInRange(boundtop, boundbottom); + this.target = new Phaser.Sprite(game, destx*32, desty*32, null); + } + if ( isSet(this.target) ) { + this.chasetarget(this.target, + STATE_NONE, + STATE_MOVING, + false + ); + } } this.action_wander = function() @@ -523,6 +542,7 @@ var AISprite = function(game, x, y, key, frame) { this.clearWordBubble(); this.state = STATE_UNAWARE; this.state_changed_at = new Phaser.Point(this.x, this.y); + this.hunt_radius = parseInt(this.hunt_radius); this.sprite_can_see_lightmeter = Number(this.sprite_can_see_lightmeter); this.sprite_canmove = parseBoolean(this.sprite_canmove); this.sprite_awareness_duration = parseInt(this.sprite_awareness_duration); @@ -567,6 +587,7 @@ var AISprite = function(game, x, y, key, frame) { this.path = []; this.state_changed_at = new Phaser.Point(this.x, this.y); this.target = null; + this.hunt_radius = 5; this.path_tweens = []; this.path_maximum_steps = 4; this.awareness_change_enabled = true; diff --git a/moonlight/src/Constants.js b/moonlight/src/Constants.js index 21300ca..cc6b4cf 100644 --- a/moonlight/src/Constants.js +++ b/moonlight/src/Constants.js @@ -1,9 +1,12 @@ +SCREEN_WIDTH = 640; +SCREEN_HEIGHT = 480; + SPEED_WALKING = 8; SPEED_RUNNING = 14; // Millisecond durations per tweens, per tile -TWEEN_DURATION_PERPIXEL_RUNNING = 5; -TWEEN_DURATION_PERPIXEL_WALKING = 9; +TWEEN_DURATION_PERPIXEL_RUNNING = 6; +TWEEN_DURATION_PERPIXEL_WALKING = 12; TWEEN_DURATION_PERTILE_RUNNING = TWEEN_DURATION_PERPIXEL_RUNNING * 32; TWEEN_DURATION_PERTILE_WALKING = TWEEN_DURATION_PERPIXEL_WALKING * 32; diff --git a/moonlight/src/main.js b/moonlight/src/main.js index 4c952cc..d4c75cd 100644 --- a/moonlight/src/main.js +++ b/moonlight/src/main.js @@ -2,7 +2,7 @@ var pathfinder = null; var pathfinder_grid = null; -var game = new Phaser.Game(640, 480, Phaser.AUTO, ''); +var game = new Phaser.Game(SCREEN_WIDTH, SCREEN_HEIGHT, Phaser.AUTO, ''); game.state.add('boot', Boot, false); game.state.add('preloader', Preloader, false);