Working on effect bubbles (visual indicators for awareness state changes)

This commit is contained in:
2014-06-15 13:37:08 -07:00
parent c576dbb95d
commit 4720391f60

View File

@@ -11,6 +11,7 @@ STATE_FACE_UP = 1 << 8;
STATE_FACE_DOWN = 1 << 9; STATE_FACE_DOWN = 1 << 9;
STATE_MOVING = 1 << 10; STATE_MOVING = 1 << 10;
STATES_AWARENESS = (STATE_UNAWARE | STATE_CONCERNED | STATE_ALERTED | STATE_LOSTHIM);
STATES_MOVEMENT = (STATE_MOVING | STATE_RUNNING); STATES_MOVEMENT = (STATE_MOVING | STATE_RUNNING);
STATES_FACE = (STATE_FACE_LEFT | STATE_FACE_RIGHT | STATE_FACE_DOWN | STATE_FACE_UP); STATES_FACE = (STATE_FACE_LEFT | STATE_FACE_RIGHT | STATE_FACE_DOWN | STATE_FACE_UP);
@@ -323,6 +324,12 @@ var moonlightSettings = {
'height': 32, 'height': 32,
'frames': 96 'frames': 96
}, },
{
'name': 'balloon',
'path': 'gfx/effects/Balloon.png',
'width': 32,
'height': 32,
'frames': 80
{ {
'name': 'player', 'name': 'player',
'path': 'gfx/sprites/sprite-player.png', 'path': 'gfx/sprites/sprite-player.png',
@@ -402,6 +409,26 @@ var moonlightSettings = {
} }
], ],
'animations': { 'animations': {
'alerted': {
'frames': [0, 1, 2, 3, 4, 5, 6, 7],
'speed': 2,
'loop': false
},
'concerned': {
'frames': [8, 9, 10, 11, 12, 13, 14, 15],
'speed': 2,
'loop': false
},
'relieved': {
'frames': [47, 48, 49, 50, 51, 52, 53, 54],
'speed': 2,
'loop': false
},
'angry': {
'frames': [55, 56, 57, 58, 59, 60, 61, 62],
'speed': 2,
'loop': false
},
'bipedwalkdown': { 'bipedwalkdown': {
'frames': [1, 2, 0], 'frames': [1, 2, 0],
'speed': 4, 'speed': 4,
@@ -666,6 +693,31 @@ var AISprite = function(game, x, y, key, frame) {
return false; return false;
} }
this.setAwarenessEffect = function(state) {
var animkey = "";
if ( state == STATE_ALERTED ) {
animkey = "alerted";
} else if ( state == STATE_CONCERNED ) {
animkey = "concerned";
} else if ( state == STATE_LOSTHIM ) {
if ( this.sprite_group == "townsfolk_guard" ) {
animkey = "angry";
} else {
animkey = "relieved";
}
}
if ( animkey == "" )
return;
this.clearWordBubble();
this.awareness_effect = game.state.states.game.add.sprite(
this.x + 16,
this.y - 16,
'balloon');
this.awareness_effect.play(animkey, null, false, true);
}
this.enableWordBubble = function() { this.enableWordBubble = function() {
this.enable_word_bubble = true; this.enable_word_bubble = true;
this.timer = game.time.create(false); this.timer = game.time.create(false);
@@ -736,6 +788,16 @@ var AISprite = function(game, x, y, key, frame) {
var running = false; var running = false;
var newstate = STATE_NONE; var newstate = STATE_NONE;
if ( this.awareness_effect !== null ) {
if ( this.awareness_effect.alive == false ) {
this.awareness_effect.destroy();
this.awareness_effect = null;
} else {
this.awareness_effect.x = this.x + 16;
this.awareness_effect.y = this.y + 16;
}
}
if ( this.bubble_text !== null ) { if ( this.bubble_text !== null ) {
if ( this.clear_bubble == true ) { if ( this.clear_bubble == true ) {
this.bubble_text.destroy(); this.bubble_text.destroy();
@@ -819,6 +881,7 @@ var AISprite = function(game, x, y, key, frame) {
Phaser.Sprite.call(this, game, x, y, null); Phaser.Sprite.call(this, game, x, y, null);
game.physics.arcade.enable(this); game.physics.arcade.enable(this);
this.awareness_effect = null;
this.player_seen_timer = null; this.player_seen_timer = null;
this.sprite_canmove = 'true'; this.sprite_canmove = 'true';
this.collide_with_player = 'true'; this.collide_with_player = 'true';
@@ -1039,6 +1102,16 @@ function setMovingState(spr, state)
addState(spr, state); addState(spr, state);
} }
function setAwarenessState(spr, state)
{
delState(spr, STATE_UNAWARE);
delState(spr, STATE_CONCERNED);
delState(spr, STATE_ALERTED);
delState(spr, STATE_LOSTHIM);
addState(spr, state);
spr.setAwarenessEffect(state);
}
function exchangeState(spr, state1, state2) function exchangeState(spr, state1, state2)
{ {
delState(spr, state1); delState(spr, state1);
@@ -1194,7 +1267,9 @@ GameState.prototype.update = function()
} }
if ( x.collide_with_player == false ) if ( x.collide_with_player == false )
return; return;
x.canSeeSprite(player, false); if ( x.canSeeSprite(player, false) == true ) {
setAwarenessState(x, STATE_ALERTED);
}
this.physics.arcade.collide(x, player); this.physics.arcade.collide(x, player);
} }