3 void push(mcrd tile
, mcrd parent
, int newcost
) {
4 mp(tile
)->cost
= newcost
;
5 mp(tile
)->parent
= parent
;
7 mnode
* new = malloc(sizeof(mnode
));
15 mnode
* tmp
= (mnode
*)l_pop(cw
->st
);
24 // returns corrected newcost
25 // сделать так, что б ход заканчивался на этой клетке
26 // т.е. дополнить стоимость до ближайшего кратного
27 // в этом случае он и так закончится тут
28 int zoc(mcrd a
, unit
* u
, int cost
){
29 if(find_feature(u
, FEATURE_IGNR
))
32 int mvp
= u
->type
->mvp
;
33 for(int i
=0; i
<6; i
++){
35 unit
* u2
= mp(n
)->unit
;
36 if(inboard(n
) && cost
%mvp
!=0
37 && u2
&& u2
->player
!=u
->player
38 && mp(n
)->fog
>0 && !is_invis(u2
) )
39 return(cost
+ mvp
- (cost
% mvp
));
47 void process_nbh (unit
* u
, mcrd t
, mcrd nb
){
51 // что бы не проходить через видимых врагов
52 unit
* u2
= mp(nb
)->unit
;
53 if(u2
// && u2->player!=u->player
58 int n
= u
->type
->ter_mvp
[mp(nb
)->type
];
59 int newcost
= zoc(nb
, u
, mp(t
)->cost
+ n
);
61 if(mp(nb
)->cost
>newcost
&& newcost
<=u
->type
->mvp
)
67 void fill_map(unit
* u
) {
70 mp(mc
)->parent
= nmcrd
;
72 push(u
->mcrd
, u
->mcrd
, 0); // push start point
73 while(cw
->st
->count
>0){
75 for(int i
=0; i
<6; i
++)
76 process_nbh(u
, t
, neib(t
, i
));
83 while(cw
->path
->count
)
84 free(l_pop(cw
->path
));
88 void addwaypoint(mcrd wp
){
89 mnode
* new = malloc(sizeof(mnode
));
91 l_push(cw
->path
, new);
96 void get_path(mcrd a
){
98 while(mp(a
)->cost
!=0){
102 // добавляем отправную точку(где стоит юнит)