/** * \brief Handles all the motor checking * * \param * * \return void */ void motor_handler(void) { static int16_t last_l_rpm=1,last_r_rpm=1; if(last_l_rpm!=l_motor.rpm) { if (l_motor.rpm>MAX_RPM) { l_motor.rpm = MAX_RPM; } else if (l_motor.rpm<1) { l_motor.rpm=0; } last_l_rpm = l_motor.rpm; l_motor.ref_pulses = l_motor.rpm / 16; } if (last_r_rpm!=r_motor.rpm) { if (r_motor.rpm>MAX_RPM) { r_motor.rpm = MAX_RPM; } else if (r_motor.rpm<1) { r_motor.rpm=0; } last_r_rpm = r_motor.rpm; r_motor.ref_pulses = r_motor.rpm / 16; } check_movement(&l_motor); check_movement(&r_motor); if (status.system.circle == true)//TODO: maybe it should be called from a state { do_cirecle(); } if (status.system.wall == true) { do_wall(); } }
void move(t_data *data, int x, int movement) { if (x == -1) { if (data->event_data.events[SDLK_LEFT] || data->event_data.events[SDLK_RIGHT]) movement /= 2; if (check_xm1(data, movement)) CHARAC.pos.y += movement; } if (x == 1) { if (GRAPHICS.map[CHARAC.pos.y / 64] [(CHARAC.pos.x + movement) / 64] != 'w') CHARAC.pos.x += movement; } else check_movement(data, movement); }
/** * game loop(void) * * @brief Game loop function * @param void * @return void */ void gameloop(void) { uint32 i = 0; tick = gettickcount(); if(tmr25 < tick){ if(tempdata()->canmovenow){ check_movement(); check_attack(); } if(tempdata()->mapanimtimer < tick){ if(tempdata()->mapanim) tempdata()->mapanim = FALSE; else tempdata()->mapanim = TRUE; tempdata()->mapanimtimer = tick + .250; } tmr25 = tick + .025; } if(walktimer < tick){ for( i = 0; i < players_on_map(); i++){ if(player(player_on_map(i))->moving > 0) process_movement(player_on_map(i)); } for( i = 0; i < MAX_MAP_NPCS; i++){ if(map()->npc[i].num){ if(map()->npc[i].moving) process_npc_movement(i); } } walktimer = tick + .030; } }