JavaScript.Projects/source/apps/WebAssembly_Ports/MasterKong2D/wasm_port/grandma.cpp
Source: JavaScript.Projects/source/apps/WebAssembly_Ports/MasterKong2D/wasm_port/grandma.cpp
// grandma.cpp
// written by jared bruni
// www.lostsidedead.com
#include "thehead.h"
// proccess the blocks
void Grandma::procblock()
{
if( level.blocks[pos+4].solid == false)
{
pos++;
}
}
// artiifical intelligence algorithm, for grandma bot
void Grandma::ai()
{
if(bpos == true)
{
if(oldpos != pos)
{
oldpos = pos;
oc = 0;
}
else
{
oc++;
if(oc > 10)
{
if(gdir == true)
{
gdir = false;
}
else
{
gdir = true;
}
oc = 0;
}
}
}
st_count ++;
if(st_count > 2)
{
st_count = 0;
if(gdir == true)
{
bool check1;
check1 = level.blocks[pos + rows(3) + 4].solid;
if(check1 == false)
{
gdir = false;
return;
}
moveright();
}
else
{
bool check1;
check1 = level.blocks[pos - rows(3) + 4].solid;
if(check1 == false)
{
gdir = true;
return;
}
moveleft();
}
}
rcount ++;
if(rcount > 20-player.difficulty )
{
rcount = 0;
releaseprojectile();
}
}
// move left
void Grandma::moveleft()
{
if(pos - 24 > 0)
{
bool check1 = level.blocks[pos-24].solid;
bool check2 = level.blocks[pos-23].solid;
bool check3 = level.blocks[pos-22].solid;
bool check4 = level.blocks[pos-21].solid;
if(check1 == false && check2 == false && check3 == false && check4 == false)
{
pos -= 24;
cur_granny = getnextwalk();
gdir = false;
} else
{
goto returnx;
}
}
else
{
returnx:
gdir = false;
cur_granny = 0;
}
}
void Grandma::moveright()
{
if(pos + 24 < LEVEL_SIZE - 24)
{
bool check1;
check1 = level.blocks[pos + 27].solid;
bool check2;
check2 = level.blocks[pos + 27 + 24].solid;
bool check3;
check3 = level.blocks[pos + 27 + 23].solid;
bool check4;
check4 = level.blocks[pos + 27 + 22].solid;
if(check1 == false && check2 == false && check3 == false && check4 == false)
{
pos += 24;
cur_granny = getnextwalk();
gdir = true;
}
else
{
goto returnx;
}
}
else
{
returnx:
gdir = true;
cur_granny = 0;
}
}
int Grandma::getnextwalk()
{
switch(cur_granny)
{
case 0:
return 1;
break;
case 1:
return 2;
break;
case 2:
return 3;
break;
case 3:
return 4;
break;
case 4:
return 0;
break;
}
return 0;
}
void Grandma::releaseprojectile()
{
int bpos;
bpos = pos;
if(gdir == true)
{
bpos += 24 + 24 + 2;
}
else
{
bpos -= 24 - 24 - 2;
}
if ( bpos > LEVEL_SIZE || bpos < 0 )
{
return;
}
hparticle.releaseparticle(bpos,gdir,true,BALL);
}
void Grandma::die()
{
death = true;
}
void Grandma::birth()
{
alive = true;
bpos = true;
cur_granny = 0;
}
int Grandma::getnextdie()
{
switch(cur_granny)
{
case 0:
case 1:
case 2:
case 3:
case 4:
return 5;
break;
case 5:
return 6;
case 6:
return 7;
case 7:
return 8;
case 8:
return 9;
case 9:
return 10;
case 10:
return -1;
}
return 0;
}