4 if(u
->player
== player
)
13 player
++; if(player
==3) player
=0;
17 if(cw
== &worlds
[players_count
])
22 if(!checkunitsleft()){
31 if(u
->player
== player
){
32 u
->mvp
= u
->type
->mvp
;
42 void keys(SDL_Event E
){
43 if(cw
->mode
!=MODE_SELECT
) return;
45 switch(E
.key
.keysym
.sym
) {
50 case SDLK_UP
: map_offset
.y
+= 54; break;
51 case SDLK_DOWN
: map_offset
.y
-= 54; break;
52 case SDLK_LEFT
: map_offset
.x
+= 72; break;
53 case SDLK_RIGHT
: map_offset
.x
-= 72; break;
54 case SDLK_SPACE
: onspace(); break;
55 case SDLK_r
: change_tile(cw
->selhex
);break;
56 case SDLK_n
: select_next_unit(); break;
63 void mouseclick(SDL_Event E
){
64 if(cw
->mode
!=MODE_SELECT
) return;
66 mcrd m
= scr2map((scrd
){E
.button
.x
, E
.button
.y
});
67 unit
* u
= mp(m
)->unit
;
69 if(u
&& u
->player
== player
){
71 }else if(cw
->selunit
){
72 if( !u
|| (u
&& (is_invis(u
)||!mp(m
)->fog
)) ){
74 int d
[100] = {0, EVENT_MOVE
, cw
->selunit
->id
};
77 mnode
* t
= (mnode
*)(l_first(cw
->path
));
79 unit
* u
= mp( ((mnode
*)l_next(t
))->crd
)->unit
;
80 if(u
&& u
->player
!=cw
->selunit
->player
)
82 mnode
* n
= (mnode
*)l_next(t
);
83 d
[len
] = mcrd2index(t
->crd
, n
->crd
);
84 t
= (mnode
*)l_next(t
);
88 //for(int i=0; i<10; i++) printf("%i ", d[i]); puts("");
93 mnode
* t
= (mnode
*)l_first(cw
->path
);
95 unit
* u
= mp(t
->crd
)->unit
;
96 if(u
&& u
->player
!=player
){
97 int dir
= mcrd2index(t
->crd
, ((mnode
*)l_prev(t
))->crd
);
98 int data
[5] = {5, EVENT_MELEE
, u
->id
, dir
, 1};
102 t
= (mnode
*)l_next(t
);
108 if(u
&& u
->player
!=player
&& cw
->selunit
109 && cw
->selunit
->can_attack
110 && !is_invis(u
) && mp(m
)->fog
> 0){
111 feature
* rng
= find_feature(cw
->selunit
, FEATURE_RNG
);
113 if(mdist(cw
->selunit
->mcrd
, m
) <= rng
->data
.rng
.range
){
114 int data
[5] = {5, EVENT_RANGE
, cw
->selunit
->id
, mp(m
)->unit
->id
, 2};
118 if(mdist(cw
->selunit
->mcrd
, m
) <= 1){
120 /*тут добавить огонь поддержки*/
122 for(int i
=0; i
<6; i
++){
124 if( mp(n
)->unit
&& mp(n
)->unit
->player
== mp(m
)->unit
->player
){
125 feature
* rng
= find_feature(mp(n
)->unit
, FEATURE_RNG
);
127 int data
[5] = {5, EVENT_RANGE
, mp(n
)->unit
->id
, cw
->selunit
->id
, 2};
134 int dir
= mcrd2index(cw
->selunit
->mcrd
, mp(m
)->unit
->mcrd
);
135 int data
[5] = {5, EVENT_MELEE
, cw
->selunit
->id
, dir
, 1};
138 /*тут добавить проверку на то, что оппонент выживет*/
141 int dir2
= mcrd2index(mp(m
)->unit
->mcrd
, cw
->selunit
->mcrd
);
142 int data2
[5] = {5, EVENT_MELEE
, mp(m
)->unit
->id
, dir2
, 1};
146 /*тут добавить проверку на необходимость отступления-бегства*/
147 // и направление нужно выбирать в цикле, а не так как сейчас
149 int data3
[4] = {4, EVENT_MOVE
, mp(m
)->unit
->id
, dir
};
160 void mousemove(SDL_Event E
){
161 cw
->selhex
= scr2map((scrd
){E
.button
.x
, E
.button
.y
});
168 while(SDL_PollEvent(&E
)){
169 if(E
.type
==SDL_QUIT
) done
= true;
170 if(E
.type
==SDL_KEYUP
) keys(E
);
171 if(E
.type
==SDL_MOUSEBUTTONDOWN
) mouseclick(E
);
172 if(E
.type
==SDL_MOUSEMOTION
) mousemove(E
);
173 if(E
.type
==SDL_VIDEORESIZE
){
174 Uint32 flags
= SDL_SWSURFACE
| SDL_RESIZABLE
;
175 screen
= SDL_SetVideoMode(E
.resize
.w
,
176 E
.resize
.h
, 32, flags
);