wesnoth/data/ai/formula/patrol.fai
2018-03-12 03:48:59 +11:00

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