void NewUnit(int selectedunit) { struct UnitNode *unit; ULONG id, modeselected; struct ModeNode *mode; unit = (struct UnitNode *) GetNode(selectedunit, UnitList); state.UnitSelected = selectedunit; id = unit->prefs.ahiup_AudioMode; FreeVec(Modes); FreeList(ModeList); ModeList = GetModes( &unit->prefs); Modes = List2Array((struct List *) ModeList); modeselected = 0; mode = (struct ModeNode *) ModeList->lh_Head; while(mode->node.ln_Succ) { if(id == mode->ID) break; modeselected++; mode = (struct ModeNode *) mode->node.ln_Succ; } if(mode->node.ln_Succ == NULL) { modeselected = ~0; } NewMode(modeselected); }
static Node *create_city (int N, list *gObj_list) { size_t gObj_n; GObject **gObj_arr; GObject *gObj_sel; hash *coords; struct coord2d * coord; struct coord2d coord_center; size_t maxX = 200; size_t maxY = 200; float bbsize = 5.0f; trfm3D *placement; Node *root, *auxNode; gObj_n = ElementsInList(gObj_list); gObj_arr = malloc(sizeof(*gObj_arr) * gObj_n); List2Array(gObj_list, (void **) gObj_arr); // elements have occupy ~ (5x5) units // generate coords (without repetition) coords = gen_coords(maxX, maxY, N); // Create Nodes coord_center.x = (int)(floor((float) maxX / 2.0f)); coord_center.y = (int)(floor((float) maxY / 2.0f)); placement = CreateTrfm3D(); root = CreateNode(); SetTrfmNode(root, placement); for(coord = StartLoopHash(coords); coord; coord = GetNextHash(coords)) { placement = CreateTrfm3D(); SetTransTrfm3D(placement, (coord->x - coord_center.x) * bbsize, 0, (coord_center.y - coord->y) * bbsize); // get one gObj at random gObj_sel = gObj_arr[ rand() % gObj_n]; auxNode = CreateNode(); SetTrfmNode(auxNode, placement); SetGobjNode(auxNode, gObj_sel); AttachNode(root, auxNode); } // Destroy coord hash for(coord = StartLoopHash(coords); coord; coord = GetNextHash(coords)) free(coord); DestroyHash(&coords); free(gObj_arr); return root; }
void NewSettings(char *name) { FreeVec(Units); FreeList(UnitList); globalprefs.ahigp_DebugLevel = AHI_DEBUG_NONE; globalprefs.ahigp_DisableSurround = FALSE; globalprefs.ahigp_DisableEcho = FALSE; globalprefs.ahigp_FastEcho = FALSE; globalprefs.ahigp_MaxCPU = (90 << 16) / 100; globalprefs.ahigp_ClipMasterVolume = FALSE; globalprefs.ahigp_AntiClickTime = 0; UnitList = GetUnits(name); Units = List2Array((struct List *) UnitList); NewUnit(0); }