int goc_labelDrawer(GOC_StElement *elem, const char *tekst) { char *line; // line do wypisania unsigned int d; // d³ugo¶æ do kopiowania dla linii do wypisania unsigned int p = 0; // przesuniêcie wzglêdem pocz±tku punktu pisania GOC_POSITION w = goc_elementGetWidth((GOC_HANDLER)elem); line = (char *)malloc(w+1); memset(line, 0, w+1); memset(line, ' ', w); if ( tekst ) d = strlen(tekst) > w ? w : strlen(tekst); else d = w; switch ( elem->flag & COC_EFLAGA_G_JUSTIFY ) { case GOC_EFLAGA_RIGHT: p = w - d; break; case GOC_EFLAGA_LEFT: p = 0; break; case GOC_EFLAGA_CENTER: p = w - d; p >>= 1; break; } if ( tekst ) memcpy( line + p, tekst, d ); goc_gotoxy( goc_elementGetScreenX( (GOC_HANDLER)elem ), goc_elementGetScreenY( (GOC_HANDLER)elem ) ); goc_textallcolor( elem->color ); fputs( line, stdout ); free(line); return GOC_ERR_OK; }
static int hotkeyNextTurnDrops( GOC_HANDLER u, GOC_StMessage* msg) { // TODO: Setting max and min landmass for forest/hills/land seperate GOC_BINFO("Turn: %3d", nBiomeTurn); if ( nBiomeTurn <= 0 ) { // fill up with sea generateFillUp(6); } else if ( nBiomeTurn <= biome.lands ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 6; generateLandMass(1, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(2, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(4, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills + biome.desert ) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(5, allowed, 1); free(allowed); } else if ( nBiomeTurn <= biome.lands + biome.trees + biome.hills + biome.desert + biome.swamp) { int *allowed = malloc(sizeof(int)*1); allowed[0] = 1; generateLandMass(7, allowed, 1); free(allowed); } else { GOC_INFO("This is the end"); // I think it's the end return GOC_ERR_OK; } nBiomeTurn++; GOC_MSG_PAINT( msgPaint ); goc_systemSendMsg(context->mapa, msgPaint); goc_gotoxy(0, 0); goc_textallcolor(GOC_WHITE); printf("%03d", nBiomeTurn); goc_gotoxy(0, 0); fflush(stdout); return GOC_ERR_OK; }
int labelMoveDrawer(GOC_StElement *e, const char *tekst) { if ( wait ) { wait--; return GOC_ERR_OK; } wait = 1; if ( width != goc_elementGetWidth( (GOC_HANDLER)e ) ) { counter = 0; direction = 0; width = goc_elementGetWidth( (GOC_HANDLER)e ); } goc_textallcolor(e->color); if ( width <= strlen( tekst ) ) { char *tekstPisany = (char *)malloc(width+1); memset( tekstPisany, 0, width+1 ); memcpy( tekstPisany, tekst, width ); goc_saveXY(); goc_gotoxy( goc_elementGetScreenX( (GOC_HANDLER)e ), goc_elementGetScreenY( (GOC_HANDLER)e )); puts(tekstPisany); goc_loadXY(); return GOC_ERR_OK; } if ( direction ) { if ( counter > 0 ) { counter--; goc_saveXY(); goc_gotoxy( goc_elementGetScreenX( (GOC_HANDLER)e ) + counter, goc_elementGetScreenY( (GOC_HANDLER)e )); printf("%s ", tekst); goc_loadXY(); } else { direction = 0; } } else { if ( counter < width-strlen(tekst) ) { counter++; goc_saveXY(); goc_gotoxy( goc_elementGetScreenX( (GOC_HANDLER)e ) + counter - 1, goc_elementGetScreenY( (GOC_HANDLER)e )); printf(" %s", tekst); goc_loadXY(); } else { direction = 1; } } return GOC_ERR_OK; }