Primer commit
This commit is contained in:
177
momia.cpp
Executable file
177
momia.cpp
Executable file
@@ -0,0 +1,177 @@
|
||||
#include "momia.h"
|
||||
#include "jgame.h"
|
||||
|
||||
Momia::Momia( JD8_Surface gfx, Info* info, bool dimoni, Uint16 x, Uint16 y, Prota* sam ) : Sprite( gfx ) {
|
||||
this->info = info;
|
||||
this->dimoni = dimoni;
|
||||
this->sam = sam;
|
||||
|
||||
this->entitat = (Entitat*)malloc( sizeof( Entitat ) );
|
||||
// Frames
|
||||
this->entitat->num_frames = 20;
|
||||
this->entitat->frames = (Frame*)malloc( this->entitat->num_frames * sizeof( Frame ) );
|
||||
Uint16 frame = 0;
|
||||
for( int y = 0; y < 4; y++ ) {
|
||||
for( int x = 0; x < 5; x++ ) {
|
||||
this->entitat->frames[frame].w = 15;
|
||||
this->entitat->frames[frame].h = 15;
|
||||
if( this->info->num_piramide == 4 ) this->entitat->frames[frame].h -= 5;
|
||||
this->entitat->frames[frame].x = (x*15)+75;
|
||||
if( this->dimoni ) this->entitat->frames[frame].x += 75;
|
||||
this->entitat->frames[frame].y = 20+(y*15);
|
||||
frame++;
|
||||
|
||||
}
|
||||
}
|
||||
// Animacions
|
||||
this->entitat->num_animacions = 4;
|
||||
this->entitat->animacions = (Animacio*)malloc( this->entitat->num_animacions * sizeof( Animacio ) );
|
||||
for( int i = 0; i < 4; i++ ) {
|
||||
this->entitat->animacions[i].num_frames = 8;
|
||||
this->entitat->animacions[i].frames = (Uint8*)malloc( 8 );
|
||||
this->entitat->animacions[i].frames[0] = 0 + (i*5);
|
||||
this->entitat->animacions[i].frames[1] = 1 + (i*5);
|
||||
this->entitat->animacions[i].frames[2] = 2 + (i*5);
|
||||
this->entitat->animacions[i].frames[3] = 1 + (i*5);
|
||||
this->entitat->animacions[i].frames[4] = 0 + (i*5);
|
||||
this->entitat->animacions[i].frames[5] = 3 + (i*5);
|
||||
this->entitat->animacions[i].frames[6] = 4 + (i*5);
|
||||
this->entitat->animacions[i].frames[7] = 3 + (i*5);
|
||||
}
|
||||
|
||||
this->cur_frame = 0;
|
||||
this->o = rand()%4;
|
||||
this->cycles_per_frame = 4;
|
||||
this->next = NULL;
|
||||
|
||||
if( this->dimoni ) {
|
||||
if( x == 0 ) {
|
||||
this->x = 150;
|
||||
} else {
|
||||
this->x = x;
|
||||
}
|
||||
if( y == 0 ) {
|
||||
if( this->sam->y > 100 ) {
|
||||
this->y = 30;
|
||||
} else {
|
||||
this->y = 170;
|
||||
}
|
||||
} else {
|
||||
this->y = y;
|
||||
}
|
||||
this->engendro = new Engendro( gfx, this->x, this->y );
|
||||
} else {
|
||||
this->engendro = NULL;
|
||||
this->x = x;
|
||||
this->y = y;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Momia::clear() {
|
||||
if( this->next != NULL ) this->next->clear();
|
||||
if( this->engendro != NULL) delete this->engendro;
|
||||
delete this->next;
|
||||
}
|
||||
|
||||
void Momia::draw() {
|
||||
|
||||
if( this->engendro != NULL ) {
|
||||
this->engendro->draw();
|
||||
} else {
|
||||
|
||||
Sprite::draw();
|
||||
|
||||
if( this->info->num_piramide == 4 ) {
|
||||
if( ( JG_GetCycleCounter() % 40 ) < 20 ) {
|
||||
JD8_BlitCK(this->x, this->y, this->gfx, 220, 80, 15, 15, 255 );
|
||||
} else {
|
||||
JD8_BlitCK(this->x, this->y, this->gfx, 235, 80, 15, 15, 255 );
|
||||
}
|
||||
}
|
||||
}
|
||||
if( this->next != NULL ) this->next->draw();
|
||||
}
|
||||
|
||||
bool Momia::update() {
|
||||
|
||||
bool morta = false;
|
||||
|
||||
if( this->engendro != NULL ) {
|
||||
if( this->engendro->update() ) {
|
||||
delete this->engendro;
|
||||
this->engendro = NULL;
|
||||
}
|
||||
} else {
|
||||
if( this->sam->o < 4 && ( this->dimoni || this->info->num_piramide == 5 || JG_GetCycleCounter()%2 == 0 ) ) {
|
||||
|
||||
if( ( this->x - 20 ) % 65 == 0 && ( this->y - 30 ) % 35 == 0 ) {
|
||||
if( this->dimoni ) {
|
||||
if( rand()%2 == 0 ) {
|
||||
if( this->x > this->sam->x ) { this->o = 3; }
|
||||
else if( this->x < this->sam->x ) { this->o = 2; }
|
||||
else if( this->y < this->sam->y ) { this->o = 0; }
|
||||
else if( this->y > this->sam->y ) { this->o = 1; }
|
||||
} else {
|
||||
if( this->y < this->sam->y ) { this->o = 0; }
|
||||
else if( this->y > this->sam->y ) { this->o = 1; }
|
||||
else if( this->x > this->sam->x ) { this->o = 3; }
|
||||
else if( this->x < this->sam->x ) { this->o = 2; }
|
||||
}
|
||||
} else {
|
||||
this->o = rand()%4;
|
||||
}
|
||||
}
|
||||
|
||||
switch( this->o ) {
|
||||
case 0:
|
||||
if( y < 170 ) this->y++;
|
||||
break;
|
||||
case 1:
|
||||
if( y > 30 ) this->y--;
|
||||
break;
|
||||
case 2:
|
||||
if( x < 280 ) this->x++;
|
||||
break;
|
||||
case 3:
|
||||
if( x > 20 ) this->x--;
|
||||
break;
|
||||
}
|
||||
|
||||
if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) {
|
||||
this->cur_frame++;
|
||||
if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) this->cur_frame = 0;
|
||||
}
|
||||
|
||||
if( this->x > ( this->sam->x - 7 ) && this->x < ( this->sam->x + 7 ) && this->y > ( this->sam->y - 7 ) && this->y < ( this->sam->y + 7 ) ) {
|
||||
morta = true;
|
||||
if( this->sam->pergami ) {
|
||||
this->sam->pergami = false;
|
||||
} else {
|
||||
this->info->vida--;
|
||||
if( this->info->vida == 0 ) this->sam->o = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( this->next != NULL ) {
|
||||
if( this->next->update() ) {
|
||||
Momia* seguent = this->next->next;
|
||||
delete this->next;
|
||||
this->next = seguent;
|
||||
this->info->momies--;
|
||||
}
|
||||
}
|
||||
|
||||
return morta;
|
||||
}
|
||||
|
||||
void Momia::insertar( Momia* momia ) {
|
||||
|
||||
if( this->next != NULL ) {
|
||||
this->next->insertar( momia );
|
||||
} else {
|
||||
this->next = momia;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user