Move to a state machine
This commit is contained in:
@@ -2,11 +2,16 @@ STATE_UNAWARE = 1 << 1;
|
|||||||
STATE_CONCERNED = 1 << 2;
|
STATE_CONCERNED = 1 << 2;
|
||||||
STATE_ALERTED = 1 << 3;
|
STATE_ALERTED = 1 << 3;
|
||||||
STATE_LOSTHIM = 1 << 4;
|
STATE_LOSTHIM = 1 << 4;
|
||||||
STATE_RUN = 1 << 5;
|
|
||||||
STATE_MOVE_LEFT = 1 << 6;
|
STATE_RUNNING = 1 << 5;
|
||||||
STATE_MOVE_RIGHT = 1 << 7;
|
STATE_FACE_LEFT = 1 << 6;
|
||||||
STATE_MOVE_UP = 1 << 8;
|
STATE_FACE_RIGHT = 1 << 7;
|
||||||
STATE_MOVE_DOWN = 1 << 9;
|
STATE_FACE_UP = 1 << 8;
|
||||||
|
STATE_FACE_DOWN = 1 << 9;
|
||||||
|
STATE_MOVING = 1 << 10;
|
||||||
|
|
||||||
|
STATES_MOVEMENT = (STATE_MOVING | STATE_RUNNING);
|
||||||
|
STATES_FACE = (STATE_FACE_LEFT | STATE_FACE_RIGHT | STATE_FACE_DOWN | STATE_FACE_UP);
|
||||||
|
|
||||||
SPRITE_TOWNSFOLK_MALE = 1;
|
SPRITE_TOWNSFOLK_MALE = 1;
|
||||||
SPRITE_TOWNSFOLK_FEMALE = 2;
|
SPRITE_TOWNSFOLK_FEMALE = 2;
|
||||||
@@ -16,10 +21,12 @@ SPRITE_TOWNSFOLK_MALE1 = 1;
|
|||||||
SPRITE_TOWNSFOLK_MALE2 = 2;
|
SPRITE_TOWNSFOLK_MALE2 = 2;
|
||||||
SPRITE_TOWNSFOLK_MALE3 = 3;
|
SPRITE_TOWNSFOLK_MALE3 = 3;
|
||||||
SPRITE_TOWNSFOLK_MALE4 = 4;
|
SPRITE_TOWNSFOLK_MALE4 = 4;
|
||||||
|
|
||||||
SPRITE_TOWNSFOLK_FEMALE1 = 5;
|
SPRITE_TOWNSFOLK_FEMALE1 = 5;
|
||||||
SPRITE_TOWNSFOLK_FEMALE2 = 6;
|
SPRITE_TOWNSFOLK_FEMALE2 = 6;
|
||||||
SPRITE_TOWNSFOLK_FEMALE3 = 7;
|
SPRITE_TOWNSFOLK_FEMALE3 = 7;
|
||||||
SPRITE_TOWNSFOLK_FEMALE4 = 8;
|
SPRITE_TOWNSFOLK_FEMALE4 = 8;
|
||||||
|
|
||||||
SPRITE_TOWNSFOLK_GUARD1 = 9;
|
SPRITE_TOWNSFOLK_GUARD1 = 9;
|
||||||
SPRITE_TOWNSFOLK_GUARD2 = 10;
|
SPRITE_TOWNSFOLK_GUARD2 = 10;
|
||||||
|
|
||||||
@@ -618,6 +625,7 @@ var AISprite = function(game, x, y, key, frame) {
|
|||||||
this.update = function()
|
this.update = function()
|
||||||
{
|
{
|
||||||
var running = false;
|
var running = false;
|
||||||
|
var newstate = STATE_NONE;
|
||||||
|
|
||||||
if ( this.bubble_text !== null ) {
|
if ( this.bubble_text !== null ) {
|
||||||
if ( this.clear_bubble == true ) {
|
if ( this.clear_bubble == true ) {
|
||||||
@@ -633,27 +641,29 @@ var AISprite = function(game, x, y, key, frame) {
|
|||||||
|
|
||||||
if ( game.rnd.integerInRange(0, 100) < 95 )
|
if ( game.rnd.integerInRange(0, 100) < 95 )
|
||||||
return;
|
return;
|
||||||
//if ( game.rnd.integerInRange(0, 100) > 90 ) {
|
if ( game.rnd.integerInRange(0, 100) > 90 ) {
|
||||||
// running = true;
|
newstate = STATE_RUNNING;
|
||||||
//}
|
}
|
||||||
|
|
||||||
switch ( game.rnd.integerInRange(0, 4) ) {
|
switch ( game.rnd.integerInRange(0, 4) ) {
|
||||||
case 0: {
|
case 0: {
|
||||||
setSpriteMovement(this, running, 'up');
|
newstate = newstate | (STATE_FACE_RIGHT | STATE_MOVING);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
setSpriteMovement(this, running, 'down');
|
newstate = newstate | (STATE_FACE_LEFT | STATE_MOVING);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
setSpriteMovement(this, running, 'left');
|
newstate = newstate | (STATE_FACE_UP | STATE_MOVING);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: {
|
case 3: {
|
||||||
setSpriteMovement(this, running, 'right');
|
newstate = newstate | (STATE_FACE_DOWN | STATE_MOVING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
exchangeState(this, (STATES_FACE | STATES_MOVEMENT), newstate);
|
||||||
|
setSpriteMovement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.update_new_values = function() {
|
this.update_new_values = function() {
|
||||||
@@ -672,7 +682,8 @@ var AISprite = function(game, x, y, key, frame) {
|
|||||||
addAnimation(this, 'bipedrunright');
|
addAnimation(this, 'bipedrunright');
|
||||||
addAnimation(this, 'bipedrunup');
|
addAnimation(this, 'bipedrunup');
|
||||||
addAnimation(this, 'bipedrundown');
|
addAnimation(this, 'bipedrundown');
|
||||||
setSpriteMovement(this, false, 'down');
|
exchangeState(this, (STATES_FACE | STATES_MOVEMENT), STATE_FACE_DOWN);
|
||||||
|
setSpriteMovement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
var spritenames_by_type = [
|
var spritenames_by_type = [
|
||||||
@@ -848,19 +859,60 @@ GameState.prototype.updateShadowTexture = function() {
|
|||||||
this.shadowTexture.dirty = true;
|
this.shadowTexture.dirty = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function setSpriteMovement(spr, running, dir)
|
function delState(spr, state)
|
||||||
|
{
|
||||||
|
spr.state = spr.state ^ state;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addState(spr, state)
|
||||||
|
{
|
||||||
|
spr.state = spr.state | state;
|
||||||
|
}
|
||||||
|
|
||||||
|
function exchangeState(spr, state1, state2)
|
||||||
|
{
|
||||||
|
delState(spr, state1);
|
||||||
|
addState(spr, state2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasState(spr, state)
|
||||||
|
{
|
||||||
|
return ( spr.state & state == state );
|
||||||
|
}
|
||||||
|
|
||||||
|
function spriteFacing(spr)
|
||||||
|
{
|
||||||
|
if ( hasState(spr, STATE_FACE_LEFT) )
|
||||||
|
return "left";
|
||||||
|
if ( hasState(spr, STATE_FACE_RIGHT) )
|
||||||
|
return "right";
|
||||||
|
if ( hasState(spr, STATE_FACE_DOWN) )
|
||||||
|
return "down";
|
||||||
|
if ( hasState(spr, STATE_FACE_UP) )
|
||||||
|
return "up";
|
||||||
|
}
|
||||||
|
|
||||||
|
function setSpriteMovement(spr)
|
||||||
{
|
{
|
||||||
var x = 0;
|
var x = 0;
|
||||||
var y = 0;
|
var y = 0;
|
||||||
|
var dir = spriteFacing(spr);
|
||||||
|
|
||||||
if ( running ) {
|
spr.body.setSize(16, 16, 8, 16);
|
||||||
|
|
||||||
|
if ( hasState(spr, STATE_RUNNING) ) {
|
||||||
x = 200;
|
x = 200;
|
||||||
y = 200;
|
y = 200;
|
||||||
spr.animations.play("bipedrun" + dir);
|
spr.animations.play("bipedrun" + dir);
|
||||||
} else {
|
} else if ( hasState(spr, STATE_MOVING) ) {
|
||||||
x = 75;
|
x = 75;
|
||||||
y = 75;
|
y = 75;
|
||||||
spr.animations.play("bipedwalk" + dir);
|
spr.animations.play("bipedwalk" + dir);
|
||||||
|
} else {
|
||||||
|
spr.body.velocity.x = 0;
|
||||||
|
spr.body.velocity.y = 0;
|
||||||
|
spr.animations.stop();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( dir == "left" ) {
|
if ( dir == "left" ) {
|
||||||
@@ -876,7 +928,6 @@ function setSpriteMovement(spr, running, dir)
|
|||||||
spr.body.velocity.x = 0;
|
spr.body.velocity.x = 0;
|
||||||
spr.body.velocity.y = y;
|
spr.body.velocity.y = y;
|
||||||
}
|
}
|
||||||
spr.body.setSize(16, 16, 8, 16);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GameState.prototype.check_input = function()
|
GameState.prototype.check_input = function()
|
||||||
@@ -884,18 +935,38 @@ GameState.prototype.check_input = function()
|
|||||||
player.body.velocity.x = 0;
|
player.body.velocity.x = 0;
|
||||||
player.body.velocity.y = 0;
|
player.body.velocity.y = 0;
|
||||||
velocityMod = 0;
|
velocityMod = 0;
|
||||||
|
var newstate = 0;
|
||||||
|
|
||||||
if ( controls.up.isDown) {
|
if ( controls.up.isDown) {
|
||||||
setSpriteMovement(player, controls.up.shiftKey, 'up');
|
if ( controls.up.shiftKey ) {
|
||||||
} else if ( controls.down.isDown ) {
|
newstate = (STATE_FACE_LEFT | STATE_MOVING | STATE_RUNNING);
|
||||||
setSpriteMovement(player, controls.up.shiftKey, 'down');
|
|
||||||
} else if ( controls.left.isDown ) {
|
|
||||||
setSpriteMovement(player, controls.up.shiftKey, 'left');
|
|
||||||
} else if ( controls.right.isDown ) {
|
|
||||||
setSpriteMovement(player, controls.up.shiftKey, 'right');
|
|
||||||
} else {
|
} else {
|
||||||
player.animations.stop(null, true);
|
newstate = (STATE_FACE_LEFT | STATE_MOVING );
|
||||||
}
|
}
|
||||||
|
} else if ( controls.down.isDown ) {
|
||||||
|
if ( controls.down.shiftKey ) {
|
||||||
|
newstate = (STATE_FACE_DOWN | STATE_MOVING | STATE_RUNNING);
|
||||||
|
} else {
|
||||||
|
newstate = (STATE_FACE_DOWN | STATE_MOVING );
|
||||||
|
}
|
||||||
|
} else if ( controls.left.isDown ) {
|
||||||
|
if ( controls.left.shiftKey ) {
|
||||||
|
newstate = (STATE_FACE_LEFT | STATE_MOVING | STATE_RUNNING);
|
||||||
|
} else {
|
||||||
|
newstate = (STATE_FACE_LEFT | STATE_MOVING );
|
||||||
|
}
|
||||||
|
} else if ( controls.right.isDown ) {
|
||||||
|
if ( controls.right.shiftKey ) {
|
||||||
|
newstate = (STATE_FACE_RIGHT | STATE_MOVING | STATE_RUNNING);
|
||||||
|
} else {
|
||||||
|
newstate = (STATE_FACE_RIGHT | STATE_MOVING );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newstate = STATE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
exchangeState(player, (STATES_FACE | STATES_MOVEMENT), newstate);
|
||||||
|
setSpriteMovement(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
GameState.prototype.update = function()
|
GameState.prototype.update = function()
|
||||||
|
|||||||
Reference in New Issue
Block a user