1 decade ago by henonchesser
http://chub.henonchesser.com/
Ok so here's the early stages of my game engine. My Character knows if he's holding something and what it is, and the objects know if they're being held and by whom. My problem is that on the death of either entity they both seem to remember this things. I've even overridden the Kill function to forget, but it doesn't. It comes out as some glitchy mess. Death sometimes seems to toggle being able to pick things up... I'm lost.
The BOX
--------------------------------------------------------------------------------------------------------------
THE PLAYER
And my re spawning the player in main
Ok so here's the early stages of my game engine. My Character knows if he's holding something and what it is, and the objects know if they're being held and by whom. My problem is that on the death of either entity they both seem to remember this things. I've even overridden the Kill function to forget, but it doesn't. It comes out as some glitchy mess. Death sometimes seems to toggle being able to pick things up... I'm lost.
The BOX
ig.module (
'game.entities.crate'
)
.requires (
'impact.entity'
)
.defines (function() {
EntityCrate = ig.Entity.extend ( {
//LOCAL VARIABLES/////////////////////////////////////////////////////////
//Size, Bounds, Orientation
size: { x:16, y:16 },
//Movement, Gravity, Speed
maxVel : { x: 100, y: 150}, //max speed the enitity can move on this axis
friction: { x: 600, y: 0 }, //friction agianst collision layer on an axis
//Collision, C Type, Checks
type: ig.Entity.TYPE.A, //Type A Collider
checkAgainst: ig.Entity.TYPE.NONE, //Don't check for collisions
collides: ig.Entity.COLLIDES.ACTIVE, //Get's Pushed
//custom game variables
pickedUp: false,
holder: null,
/////////////////////////////////////////////////////////////////////////
//Initial Tiles
animSheet: new ig.AnimationSheet( 'media/basegreen.png', 16, 16 ),
init: function( x, y, settings) {
this.addAnim('idle',1, [15]);
//defualt settings, overides anything before it
this.parent( x, y, settings);
}, //INITIALIZE
kill: function(){
this.pickedUp = false;
this.holder = null;
this.parent();
},
update: function() {
this.parent();
this.currentAnim = this.anims.idle;
if (this.standing) {
this.friction.y = 1000;
this.maxVel.y = 0;
}
else {
this.friction.y = 200;
this.maxVel.y = 150;
}
if (this.holder != null && this.pickedUp == true) {
this.pos.y = this.holder.pos.y;
//and
if (this.holder.flip == true){
this.pos.x = this.holder.pos.x - 14;
this.collides = ig.Entity.COLLIDES.NEVER;
}
else {
this.pos.x = this.holder.pos.x + 10;
this.collides = ig.Entity.COLLIDES.NEVER;
}
}
else {
this.collides = ig.Entity.COLLIDES.ACTIVE
}
},
beACrate: function() {
},
draw: function() {
this.parent();
}
});
});
--------------------------------------------------------------------------------------------------------------
THE PLAYER
ig.module (
'game.entities.player'
)
.requires (
'impact.entity'
)
.defines (function() {
EntityPlayer = ig.Entity.extend ( {
//LOCAL VARIABLES/////////////////////////////////////////////////////////
//Size, Bounds, Orientation
size: { x:12, y:16 },
offset: { x:2, y:0 },
flip: false,
zIndex:50,
//Movement, Gravity, Speed
maxVel : { x: 100, y: 150}, //max speed the enitity can move on this axis
friction: { x: 600, y: 0 }, //friction agianst collision layer on an axis
accelGround: 400, //movement acceleration on ground
accelAir: 200, // ditto only in air
jump: 120, // jump speed, only it's used as a negative later on
//Collision, C Type, Checks
type: ig.Entity.TYPE.A, //Type A Collider
checkAgainst: ig.Entity.TYPE.NONE, //Don't check for collisions
collides: ig.Entity.COLLIDES.PASSIVE, //Get's Pushed
//Custom Game Variables
flapPower: 5,
attacking:false,
blocking:false,
skin: 0,
//picking up stuff
holding: false,
holdingWhat:null,
/////////////////////////////////////////////////////////////////////////
//Initial Tiles
animSheet: new ig.AnimationSheet( 'media/player.png', 16, 16 ),
init: function( x, y, settings) {
//Start the animation
this.setupAnimation(0);
//defualt settings, overides anything before it
this.parent( x, y, settings);
if(!ig.global.wm) {
ig.game.spawnEntity(EntityShield,this.pos.x, this.pos.y, {flip: this.flip} );
ig.game.spawnEntity(EntitySword,this.pos.x, this.pos.y, {flip: this.flip} );
}
}, //INITIALIZE
setupAnimation: function(skin) {
this.addAnim( 'idle', 1, [0+skin]);
this.addAnim('run', .07, [ 0+skin, 1+skin]);
this.addAnim('jump', 0.1, [2+skin, 3+skin]);
this.addAnim('fall', 0.1, [2+skin, 3+skin]);
}, //SETUP ANIMATION
kill: function(){
this.holding = false;
this.holdingWhat = null;
this.parent();
},
update: function () {
//MOVEMENT//////////////////////////////////////////////////////////
if (this.blocking == true) {
this.maxVel.x = 50;
this.jump = 60;
}
else {
this.maxVel.x = 100;
this.jump = 120;
}
//movement - left + right
var accel = this.standing ? this.accelGround : this.accelAir;
if ( ig.input.state ('p1left') ) {
this.accel.x = -accel; //moving left is negative
this.flip = true;
}
else if ( ig.input.state ('p1right') ) {
this.accel.x = accel;
this.flip = false;
}
else {
this.accel.x = 0;
}
// jump
if ( this.standing && ig.input.pressed ('p1jump') ) {
this.vel.y = -this.jump;
}
else if ( ig.input.pressed('p1jump') && this.flapPower != 0 ) {
this.vel.y = -this.jump / 2 ;
this.flapPower--;
}
//reset flying
if ( this.standing) {
this.flapPower = 5;
}
//ANIMATION INIT//
//sets animation based on velocity both X and Y
if ( this.vel.y < 0 ) {
this.currentAnim = this.anims.jump;
}
else if ( this.vel.y > 0 ) {
this.currentAnim = this.anims.fall;
}
else if ( this.vel.x != 0 ) {
this.currentAnim = this.anims.run;
}
else{
this.currentAnim = this.anims.idle;
}
//END ANIM INIT//
//END MOVEMENT///////////////////////////////////////////////////////////
this.parent();
//flips animation if entity is flipped
this.currentAnim.flip.x = this.flip;
}, //UPDATE METHOD
draw: function() {
this.parent();
}
} );
EntityShield = ig.Entity.extend ({
//variables
owner: null,
//Size, Bounds, Orientation
size: { x:12, y:16 },
offset: { x:2, y:0 },
zIndex:100,
//Initial Tiles
animSheet: new ig.AnimationSheet( 'media/base.png', 16, 16 ),
init: function( x, y, settings) {
this.addAnim('idle',1, [170]);
//defualt settings, overides anything before it
this.parent ();
}, //INITIALIZE
update: function (x, y, settings) {
this.parent(x,y,settings);
//this.pos.x = this.parent.x;
//this.pos.y = this.parent.y;
var master = ig.game.getEntitiesByType( EntityPlayer )[0];
if( !master){
this.kill();
}
else {
//FLIP THE SHIELD IF THE PLAYER IS FLIPPED////////////////
this.pos.y = master.pos.y +2; //POS X
if (master.flip == true) {
this.pos.x = master.pos.x +4; //POS Y FLIPPED
}
else {
this.pos.x = master.pos.x -4; //POS Y NONFLIPPED
}
//USE SHILED/////////////////////////////////////////////
if ( ig.input.state ('p1shield') && master.attacking == false) {
if (master.flip == true) {
this.pos.x -= 8; //POS Y FLIPPED
master.blocking = true;
}
else {
this.pos.x += 8; //POS Y NONFLIPPED
master.blocking = true;
}
}
else {
master.blocking = false;
}
}
},
draw: function() {
this.parent();
}
});
EntitySword = ig.Entity.extend ({
//variables
owner: null,
//Size, Bounds, Orientation
size: { x:12, y:16 },
offset: { x:2, y:0 },
zIndex:1,
flip: null,
//Attack Vars
attackSpeed: 2,
attackRange: 8,
attackTimer: null,
attacking: false,
//Collision, C Type, Checks
type: ig.Entity.TYPE.A, //Type A Collider
checkAgainst: ig.Entity.TYPE.A, //Don't check for collisions
collides: ig.Entity.COLLIDES.PASSIVE, //Get's Pushed
//Initial Tiles
animSheet: new ig.AnimationSheet( 'media/base.png', 16, 16 ),
init: function( x, y, settings) {
this.addAnim('idle',1, [256]);
//defualt settings, overides anything before it
this.parent ();
this.attackTimer = new ig.Timer();
}, //INITIALIZE
check: function( other ) {
var master = ig.game.getEntitiesByType( EntityPlayer )[0];
if (typeof(other.beACrate) == 'function' && master.holding == false && master.attacking == true){
master.holding = true;
master.holdingWhat = other;
other.pickedUp = true;
other.holder = this;
//other.flip = this.flip;
}
}, //INITIALIZE
update: function (x, y, settings) {
this.parent(x,y,settings);
//this.pos.x = this.parent.x;
//this.pos.y = this.parent.y;
var master = ig.game.getEntitiesByType( EntityPlayer )[0];
if( !master){
this.kill();
}
else {
//FLIP THE SWORD IF THE PLAYER IS FLIPPED////////////////
this.pos.y = master.pos.y; //POS X
if (master.flip == true) {
this.flip = true;
this.pos.x = master.pos.x -6; //POS Y FLIPPED
}
else {
this.flip = false;
this.pos.x = master.pos.x + 6; //POS Y NONFLIPPED
}
//USE SHILED/////////////////////////////////////////////
if ( ig.input.pressed ('p1sword') && master.attacking == false && master.blocking == false && master.holding == false) {
//now we're attacking
master.attacking = true;
this.attackTimer.set(.2);
}
else if (ig.input.pressed ('p1sword') && master.attacking == false && master.blocking == false && master.holding == true){
//now we're throwing
if (master.holdingWhat !=null){
//drop anything
master.holding = false;
//shoot the held item
if (ig.input.state ('p1down')) {
//lay it down gently
}
else {
if (master.flip == true){
master.holdingWhat.vel.x = -500;
}
else {
master.holdingWhat.vel.x = 500;
}
}
//tell the held item what to think
master.holdingWhat.pickedUp = false;
master.holdingWhat.holder = null;
//remove our reference to it
master.holdingWhat = null;
}
}
if( master.blocking == true) {
if (master.flip == true) {
this.pos.x = master.pos.x +2; //POS Y FLIPPED
}
else {
this.pos.x = master.pos.x -2; //POS Y NONFLIPPED
}
}
if( master.attacking == true) {
this.collides = ig.Entity.COLLIDES.ACTIVE;
if (master.flip == true) {
this.pos.x -= this.attackRange - this.attackTimer.delta()/this.attackRange; //POS Y FLIPPED
}
else {
this.pos.x += this.attackRange - this.attackTimer.delta()/this.attackRange; //POS Y NONFLIPPED
}
if (this.attackTimer.delta() >= 0){
master.attacking = false;
//alert("Attack");
}
}
else {
this.collides = ig.Entity.COLLIDES.NEVER;
}
this.currentAnim.flip.x = master.flip;
}
},
draw: function() {
this.parent();
}
});
} );
And my re spawning the player in main
if(this.player1._killed || !this.player1 && this.spawnTimer.delta() >= 1 ){
this.player1 = ig.game.spawnEntity(EntityPlayer,this.p1StartPosX,this.p1StartPosY);
this.spawnTimer.reset();
}
