73 lines
No EOL
1.2 KiB
Text
73 lines
No EOL
1.2 KiB
Text
wfl 'patrol.fai'
|
|
|
|
def closest_unit(ai*, me)
|
|
choose(
|
|
enemy_units, 'unit',
|
|
-distance_between(me.loc, unit.loc)
|
|
);
|
|
|
|
def step_move(me)
|
|
if( unit_at( desired_path[0] ),
|
|
if( desired_path.size > 1,
|
|
move_partial(
|
|
me.loc,
|
|
desired_path[1]
|
|
),
|
|
end
|
|
),
|
|
move_partial(
|
|
me.loc,
|
|
desired_path[0]
|
|
)
|
|
)
|
|
|
|
where desired_path = shortest_path( me.loc, me.vars.next_step );
|
|
|
|
def move_ahead(ai*, me)
|
|
if( enemy_units,
|
|
if( distance_between( closest_unit(ai, me).loc, me.loc ) > me.moves-1,
|
|
move_partial(
|
|
me.loc,
|
|
me.vars.next_step
|
|
),
|
|
|
|
step_move(me)
|
|
|
|
),
|
|
move_partial(
|
|
me.loc,
|
|
me.vars.next_step
|
|
)
|
|
);
|
|
|
|
def patrol_move(ai*, me)
|
|
if( me.vars.next_step = me.loc,
|
|
set_unit_var('next_step',
|
|
me.vars.waypoints[ me.vars.next_step ],
|
|
me.loc
|
|
),
|
|
|
|
move_ahead(ai,me)
|
|
);
|
|
|
|
if( me.moves = 0,
|
|
end,
|
|
if(attack,
|
|
attack,
|
|
patrol_move(self, me)
|
|
)
|
|
)
|
|
|
|
where attack = if( path_to,
|
|
if(path_to.size <= me.vars.guard_radius,
|
|
attack( me.loc, path_to.last, closest_unit(self, me).loc ),
|
|
0
|
|
),
|
|
0
|
|
)
|
|
|
|
where path_to = if( enemy_units,
|
|
shortest_path( me.loc, closest_unit(self, me).loc ),
|
|
[]
|
|
)
|
|
wflend |