void TGLobject_ship::recharge_fuel(SFXManager *SFXM,int sfx_volume) { if (m_fuel<m_max_fuel) { m_fuel+=8; if (m_fuel>m_max_fuel) m_fuel=m_max_fuel; if (m_fuel_channel==-1) { m_fuel_channel=Sound_play_continuous(SFXM->get(TGL_SFX_FOLDER "/fuel"),sfx_volume); } // if m_fuel_recharging_timmer=2; } // if } /* TGLobject_ship::recharge_fuel */
bool TGLobject_ship_accura::cycle(VirtualController *k,TGLmap *map,GLTManager *GLTM,SFXManager *SFXM,int sfx_volume) { m_cycle++; // Check for collision: if (map->collision(this,0,0,0)) { if (!map->collision_with_foreground(this,0,0,0)) { TGLobject *obj = map->collision_with_object(this); if (obj->is_a("TGLobject_soft_bullet")) { int a=obj->get_angle()-90; while(a<0) a+=360; while(a>=360) a-=360; m_speed_x+=float(cos_degree(a)*48.0)/256.0f; m_speed_y+=float(sin_degree(a)*48.0)/256.0f; } else { Sound_play(SFXM->get("sfx/explosion"),sfx_volume); map->add_auxiliary_front_object(new TGLobject_FX_explosion2(get_x(),get_y(),256,200)); return false; } } else { Sound_play(SFXM->get("sfx/explosion"),sfx_volume); map->add_auxiliary_front_object(new TGLobject_FX_explosion2(get_x(),get_y(),256,200)); return false; } } // if m_thrusting=false; if (m_fuel_recharging_timmer>0) { m_fuel_recharging_timmer--; if (m_fuel_recharging_timmer==0) { if (m_fuel_channel!=-1) { Mix_HaltChannel(m_fuel_channel); m_fuel_channel=-1; } // if } // if } // if if (k->m_button[1] && (fabs(m_speed_x)+fabs(m_speed_y))<1) { TGLobject_ball *ball; ball=(TGLobject_ball *)map->object_exists("TGLobject_ball",get_x()-16,get_y(),get_x()+16,get_y()+64); if (ball!=0 && m_ball==0) { if (ball->attractor()) { if (ball->get_state()==0) map->action(0); ball->capture(5); m_ball=ball; Sound_play(SFXM->get("sfx/takeball"),sfx_volume); } // if } // if // Attractor effect: { if ((m_cycle%6)==0) { map->add_auxiliary_back_object(new TGLobject_FX_particle(get_x(),get_y()+48,0,0,-1,0,false, 0.5f,0.5f, 0.5f,0.5f, 1,1, 1,0,0.75,0.5f,50,GLTM->get("objects/ripple-back"))); map->add_auxiliary_front_object(new TGLobject_FX_particle(get_x(),get_y()+48,0,0,-1,0,false, 0.5f,0.5f, 0.5f,0.5f, 1,1, 1,0,0.75,0.5f,50,GLTM->get("objects/ripple-front"))); } // if }; } // if if (k->m_button[0] && !k->m_old_button[0] && m_fuel>40) { TGLobject *bullet; int a=m_angle-90; while(a<0) a+=360; while(a>=360) a-=360; if (m_missile_side==0) { bullet=new TGLobject_bullet_hmissile(float(get_x()+(cos_degree(a)*8)+(sin_degree(a)*7)),float(get_y()+(sin_degree(a)*8)-(cos_degree(a)*7)),0,m_angle,4,1,GLTM->get("objects/bullet-small-grey-missile1"),GLTM->get("objects/bullet-small-grey-missile2"),this); m_missile_side=1; } else { bullet=new TGLobject_bullet_hmissile(float(get_x()+(cos_degree(a)*8)-(sin_degree(a)*7)),float(get_y()+(sin_degree(a)*8)+(cos_degree(a)*7)),0,m_angle,4,1,GLTM->get("objects/bullet-small-grey-missile1"),GLTM->get("objects/bullet-small-grey-missile2"),this); m_missile_side=0; } // if if (m_ball!=0) bullet->exclude_for_collision(m_ball); map->add_object_back(bullet); m_fuel-=40; Sound_play(SFXM->get("sfx/shipshot2"),sfx_volume); } // if if (k->m_joystick[VC_LEFT]) { m_angle-=4; if (m_angle<0) m_angle+=360; } // if if (k->m_joystick[VC_RIGHT]) { m_angle+=4; if (m_angle>=360) m_angle-=360; } // if if (k->m_joystick[VC_UP] && m_fuel>0) { int a=m_angle-90; while(a<0) a+=360; while(a>=360) a-=360; m_speed_x+=float(cos_degree(a)*11.0)/256.0f; m_speed_y+=float(sin_degree(a)*11.0)/256.0f; m_thrusting=true; m_fuel--; } // if if (m_speed_x>0) m_speed_x-=1.0f/256.0f; if (m_speed_x<0) m_speed_x+=1.0f/256.0f; m_speed_y+=2.0f/256.0f; if (m_speed_x>8) m_speed_x=8; if (m_speed_x<-8) m_speed_x=-8; if (m_speed_y>8) m_speed_y=8; if (m_speed_y<-8) m_speed_y=-8; m_x+=m_speed_x; m_y+=m_speed_y; if (m_x<0) { m_x=0; m_speed_x=0; } /* if */ if (m_y<0) { m_y=0; m_speed_y=0; } /* if */ if (m_x>(map->get_dx())) { m_x=float(map->get_dx()); m_speed_x=0; } /* if */ if (m_y>(map->get_dy())) { m_y=float(map->get_dy()); m_speed_y=0; } /* if */ // Ball attraction: if (m_ball!=0) { float dx=m_ball->get_x()-get_x(); float dy=m_ball->get_y()-get_y(); float d=float(sqrt(dx*dx+dy*dy)); if (d<2) d=2; { float inc=float(28/sqrt(d)); float inc_x=((dx/d)*inc)/256.0f; float inc_y=((dy/d)*inc)/256.0f; m_ball->set_speed_x(m_ball->get_speed_x()-inc_x); m_ball->set_speed_y(m_ball->get_speed_y()-inc_y); } } // if if (m_thrusting) { if ((m_cycle%4)==0) map->add_auxiliary_back_object(new TGLobject_FX_particle(get_x(),get_y(),rand()%60,0,0,1,false,0.125f,0,0.5f,1.5f,50,GLTM->get("objects/smoke"))); if (m_thrust_channel==-1) { m_thrust_channel=Sound_play_continuous(SFXM->get("sfx/thrust"),sfx_volume); } // if } else { if (m_thrust_channel!=-1) { Mix_HaltChannel(m_thrust_channel); m_thrust_channel=-1; } // if } // if return true; } /* TGLobject::cycle */