ref: 07469015a833ea56db430aed28f004e205549360
dir: /build.c/
#include <u.h> #include <libc.h> #include <thread.h> #include <draw.h> #include <mouse.h> #include <keyboard.h> #include "dat.h" #include "fns.h" extern Mousectl *mc; static Tile *site; int couldbuild(Building *b) { int i; for(i=0; i<nelem(b->buildcost); i++) if(b->buildcost[i] > stock[i]) return 0; return 1; } int isbuildable(Tile *t) { return t->b == nil && t->t == terrains + Tplain; } static char * genmenu(int n) { switch(n){ case 0: return "build"; default: return nil; } } static Menu menu = {0, genmenu}; static int select(Tile *t) { Building *b; b = buildings + (t - map); return b >= buildings + nelem(buildings) ? -1 : 0; } static int action(Tile *t) { int i; Building *b; b = buildings + (t - map); if(b >= buildings + nelem(buildings)) return -1; selected = t; if(menuhit(3, mc, &menu, nil) < 0) return -1; /* FIXME: show some error message in status bar */ if(!couldbuild(b)) return 0; for(i=0; i<nelem(b->buildcost); i++){ stock[i] -= b->buildcost[i]; assert(stock[i] >= 0); } spawn(site, b - buildings); deselect(); return 0; } Menuptr buildmenu(Tile *t) { site = t; selected = nil; gsetcursor(Curstarget); mapdrawfn = drawbuildmenu; selectfn = select; return action; }