global TSEnemy = {};
function TSEnemy_Create( eptr, pos, vdir )
{
E =
{
// enemy pointer for additional queries
eptr = eptr,
// set before tick
position = pos,
viewdir = vdir,
// read after tick
i_crouch = false,
i_move = vec2(0,0),
// coroutine + timer
resume_delay = 0.0,
coro_ai_main = co_create( function( E ){ E.AI_proc(); } ),
// global systems
move_to_target = null,
};
E = class( E, TSEnemy );
co_resume( E.coro_ai_main, E );
return E;
}
function TSEnemy.destroy()
{
}
function TSEnemy.tick( deltaTime )
{
this.resume_delay -= deltaTime;
if( this.resume_delay <= 0.0 )
{
this.resume_delay = toreal( co_resume( this.coro_ai_main ) );
}
if( this.move_to_target !== null )
{
this.i_move = vec2( this.move_to_target - this.position );
}
}
function TSEnemy.AI_proc()
{
yield();
for(;;)
{
cp = vec3(-2.5,2.5,0);
this.move_to_target = cp+vec3(1,0,0);yield(1);
this.move_to_target = cp+vec3(0,1,0);yield(1);
this.move_to_target = cp+vec3(-1,0,0);yield(1);
this.move_to_target = cp+vec3(0,-1,0);yield(1);
// TODO
yield();
}
}
Comments