From 79509de06b13b82dd4eff904f3f7675561672369 Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Thu, 19 Jun 2014 20:14:12 -0700 Subject: [PATCH] Making townsfolk report you to a guard --- moonlight/js/moonlight-skulk.js | 43 +++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/moonlight/js/moonlight-skulk.js b/moonlight/js/moonlight-skulk.js index de4f3d1..5f009e8 100644 --- a/moonlight/js/moonlight-skulk.js +++ b/moonlight/js/moonlight-skulk.js @@ -1053,32 +1053,19 @@ var AISprite = function(game, x, y, key, frame) { this.action_reportplayer = function() { - var aiSprites = game.state.states.game.aiSprites; - var nearest = null; - var lastdist = 0.0; if ( (this.path.length < 1) || this.path_index >= this.path.length) { - for ( var i = 0 ; i < aiSprites.length; i++ ) { - console.log("Checking out aiSprite[" + i + "]"); - spr = aiSprites.getChildAt(i); - console.log(spr); - if ( spr.sprite_group !== "townsfolk-guard" ) - continue; - var dist = new Phaser.Line(this.x, this.y, spr.x, spr.y); - if ( (lastdist == 0.0 ) || (dist.length < lastdist) ) { - lastdist = dist; - nearest = spr; - } - } - console.log("Running to nearest for help"); - console.log(nearest); - this.target = nearest; + var aiSprites = game.state.states.game.aiSprites; + this.target = nearestInGroup(this, aiSprites); } if ( this.target !== null ) { if ( this.target.canSeeSprite(this) == true ) { console.log("My target can see me!"); this.path_tween_stop(); this.path_purge(); + var staticLights = game.state.states.game.staticLights; + this.target = nearestInGroup(staticLights); } + var chaseState = STATE_ALERTED; this.chasetarget(this.target, STATE_ALERTED, STATE_MOVING | STATE_RUNNING, @@ -1200,6 +1187,7 @@ var AISprite = function(game, x, y, key, frame) { this.sprite_can_see_lightmeter = 0.3; this.awareness_effect = null; this.awareness_timer = null; + this.lastSawPlayerAt = null; this.seen_directions = []; this.sprite_awareness_duration = 60000; this.sprite_canmove = 'true'; @@ -1241,6 +1229,24 @@ function positiveRectangle(x, y, w, h) { return new Phaser.Rectangle(x, y, w, h); } +function nearestInGroup(sprite, group) { + var nearest = null; + var lastdist = 0.0; + for ( var i = 0 ; i < aiSprites.length; i++ ) { + console.log("Checking out aiSprite[" + i + "]"); + var spr = aiSprites.getChildAt(i); + console.log(spr); + if ( spr.sprite_group !== "townsfolk-guard" ) + continue; + var dist = new Phaser.Line(sprite.x, sprite.y, spr.x, spr.y); + if ( (lastdist == 0.0 ) || (dist.length < lastdist) ) { + lastdist = dist; + nearest = spr; + } + } + return nearest; +} + function addAnimation(obj, anim) { a = moonlightSettings['animations'][anim] @@ -1633,6 +1639,7 @@ GameState.prototype.update = function() if ( x.collide_with_player == false ) return; if ( x.canSeeSprite(player, false) == true ) { + x.lastSawPlayerAt = new Phaser.Point(player.x, player.y); if ( this.physics.arcade.collide(x, player) ) { x.setAwarenessEffect(STATE_ALERTED); } else if ( player.lightmeter >= x.sprite_can_see_lightmeter ) {