void nofWarehouseWorker::Draw(int x, int y) { // Trage ich ne Ware oder nicht? if(carried_ware) DrawWalkingBobCarrier(x, y, carried_ware->type, fat); // // Japaner-Schild-Animation existiert leider nicht --> Römerschild nehmen // DrawWalking(x,y,LOADER.GetBobN("carrier"),(carried_ware->type==GD_SHIELDJAPANESE) ? GD_SHIELDROMANS:carried_ware->type,fat); else DrawWalkingBobJobs(x, y, fat ? JOB_TYPES_COUNT : 0); // DrawWalking(x,y,LOADER.GetBobN("jobs"),0,fat); }
/** * * * @author OLiver */ void nofCarrier::Draw(int x, int y) { // Unterscheiden, um was für eine Art von Träger es sich handelt switch(ct) { case CT_NORMAL: { if(state == CARRS_WAITFORWARE || (waiting_for_free_node && !pause_walked_gf && !carried_ware)) { bool animation = false; // Ist es schon Zeit für eine Animation? unsigned current_gf = GAMECLIENT.GetGFNumber(); if(current_gf >= next_animation) { // Animationstype bestimmen unsigned animation_id = next_animation % 4; // <Silvesteregg> // day of year, 0-365, accuracy about 1/4 day int doy = (TIME.CurrentTime() % 31556925) / 86400; // last hours of last or first day of year if ((doy > 364) || (doy < 1)) { animation_id = next_animation % 5; } // </Silvesteregg> // Ist die Animation schon vorbei? if (((animation_id < 4) && (current_gf >= next_animation + ANIMATION_FRAME_LENGTHS[fat ? 1 : 0][animation_id]*FRAME_GF)) || ((animation_id == 4) && (current_gf >= next_animation + 32 * 3))) { // Neuen nächsten Animationszeitpunkt bestimmen SetNewAnimationMoment(); } else { animation = true; if (animation_id < 4) { // Nein, dann Animation abspielen LOADER.GetImageN("rom_bobs", ANIMATION[fat ? 1 : 0][animation_id][(current_gf - next_animation) / FRAME_GF]) ->Draw(x, y, 0, 0, 0, 0, 0, 0, COLOR_WHITE, COLORS[gwg->GetPlayer(player)->color]); } else if (animation_id == 4) // Silvesteregg { glArchivItem_Bitmap* bmp = LOADER.GetImageN("firework", (current_gf - next_animation) / 3 + 1); if (bmp) { bmp->Draw(x - 26, y - 104, 0, 0, 0, 0, 0, 0, COLOR_WHITE, COLORS[gwg->GetPlayer(player)->color]); } else { SetNewAnimationMoment(); animation = false; } } } } if(!animation) { Loader::bob_jobs_cache[gwg->GetPlayer(player)->nation][fat ? JOB_TYPES_COUNT : 0][GetCurMoveDir()][2].draw(x, y, COLOR_WHITE, COLORS[gwg->GetPlayer(player)->color]); } else // Steht und wartet (ohne Ware) // LOADER.GetBobN("jobs")->Draw(0,dir,fat,2,x,y,COLORS[gwg->GetPlayer(player)->color]); DrawShadow(x, y, 0, GetCurMoveDir()); } else if(state == CARRS_WAITFORWARESPACE || (waiting_for_free_node && !pause_walked_gf && carried_ware)) { // Steht und wartet (mit Ware) Loader::carrier_cache[carried_ware->type][GetCurMoveDir()][2][fat].draw(x, y, COLOR_WHITE, COLORS[gwg->GetPlayer(player)->color]); // Japaner-Schild-Animation existiert leider nicht --> Römerschild nehmen // LOADER.GetBobN("carrier")->Draw((carried_ware->type==GD_SHIELDJAPANESE)?GD_SHIELDROMANS:carried_ware->type, // dir,fat,2,x,y,COLORS[gwg->GetPlayer(player)->color]); // DrawShadow(x,y,0,dir); } else { // Läuft normal mit oder ohne Ware if(carried_ware) DrawWalkingBobCarrier(x, y, carried_ware->type, fat); // DrawWalking(x,y,LOADER.GetBobN("carrier"),(carried_ware->type==GD_SHIELDJAPANESE)?GD_SHIELDROMANS:carried_ware->type,fat); else DrawWalkingBobJobs(x, y, fat ? JOB_TYPES_COUNT : 0); } } break; case CT_DONKEY: { if(state == CARRS_WAITFORWARE || (waiting_for_free_node && !pause_walked_gf && !carried_ware)) { // Steht und wartet (ohne Ware) // Esel Loader::donkey_cache[GetCurMoveDir()][0].draw(x, y); } else if(state == CARRS_WAITFORWARESPACE || (waiting_for_free_node && !pause_walked_gf && carried_ware)) { //// Steht und wartet (mit Ware) //// Japaner-Schild-Animation existiert leider nicht --> Römerschild nehmen // Esel Loader::donkey_cache[GetCurMoveDir()][0].draw(x, y); // Ware im Korb zeichnen LOADER.GetMapImageN(2350 + carried_ware->type)->Draw(x + WARE_POS_DONKEY[GetCurMoveDir() * 16], y + WARE_POS_DONKEY[GetCurMoveDir() * 16 + 1]); } else { // Wenn wir warten auf ein freies Plätzchen, müssen wir den stehend zeichnen! // Wenn event = 0, dann sind wir mittem auf dem Weg angehalten! unsigned ani_step = waiting_for_free_node ? 2 : GAMECLIENT.Interpolate(ASCENT_ANIMATION_STEPS[ascent], current_ev) % 8; CalcFigurRelative(x, y); // Läuft normal mit oder ohne Ware // Esel Loader::donkey_cache[GetCurMoveDir()][ani_step].draw(x, y); if(carried_ware) { // Ware im Korb zeichnen LOADER.GetMapImageN(2350 + carried_ware->type)->Draw(x + WARE_POS_DONKEY[GetCurMoveDir() * 16 + ani_step * 2], y + WARE_POS_DONKEY[GetCurMoveDir() * 16 + ani_step * 2 + 1]); } } } break; case CT_BOAT: { if(state == CARRS_FIGUREWORK) { // Beim normalen Laufen Träger mit Boot über den Schultern zeichnen DrawWalkingBobCarrier(x, y, GD_BOAT, fat); // DrawWalking(x,y,LOADER.GetBobN("carrier"),GD_BOAT,fat); } else if(state == CARRS_WAITFORWARE || (waiting_for_free_node && !pause_walked_gf && !carried_ware)) { Loader::boat_cache[GetCurMoveDir()][0].draw(x, y, 0xFFFFFFFF, COLORS[gwg->GetPlayer(player)->color]); } else if(state == CARRS_WAITFORWARESPACE || (waiting_for_free_node && !pause_walked_gf && carried_ware)) { Loader::boat_cache[GetCurMoveDir()][0].draw(x, y, 0xFFFFFFFF, COLORS[gwg->GetPlayer(player)->color]); // Ware im Boot zeichnen LOADER.GetMapImageN(2350 + carried_ware->type)->Draw(x + WARE_POS_BOAT[GetCurMoveDir() * 2], y + WARE_POS_BOAT[GetCurMoveDir() * 2 + 1]); } else { // Wenn wir warten auf ein freies Plätzchen, müssen wir den (fest)stehend zeichnen! // Wenn event = 0, dann sind wir mittem auf dem Weg angehalten! unsigned ani_step = waiting_for_free_node ? 2 : GAMECLIENT.Interpolate(ASCENT_ANIMATION_STEPS[ascent], current_ev) % 8; CalcFigurRelative(x, y); // ruderndes Boot zeichnen Loader::boat_cache[GetCurMoveDir()][ani_step].draw(x, y, 0xFFFFFFFF, COLORS[gwg->GetPlayer(player)->color]); // Läuft normal mit oder ohne Ware if(carried_ware) // Ware im Boot zeichnen LOADER.GetMapImageN(2350 + carried_ware->type)->Draw(x + WARE_POS_BOAT[GetCurMoveDir() * 2], y + WARE_POS_BOAT[GetCurMoveDir() * 2 + 1]); // Sound ggf. abspielen if(ani_step == 2) SOUNDMANAGER.PlayNOSound(84, this, 0); last_id = ani_step; } } break; } }