#include #include #include "radio.h" #include "radio_addr.h" #include "led_driver.h" #include "controller.h" #include "messages.h" #include "controller_input.h" #include "controls.h" unsigned char current_level=1; unsigned char current_player=RADIO_ADDR_NULL; unsigned char resetting=1; unsigned char game_over=1; unsigned char aiming=0; unsigned char aim_remaining=0; unsigned char shots_taken=0; unsigned int display_value=0x00; unsigned char display_dir=0; unsigned char display_type=DISP_TYPE_NONE; unsigned char display_iter=0; unsigned char rec_src,rec_len; unsigned char rec_buffer[RADIO_BUFFER_SIZE]; unsigned char aim_timer=0; unsigned char laser_timer=TIMER_8_OFF; unsigned int reset_timer=TIMER_OFF; unsigned char input_timer=INPUT_UPDATE_TIMEOUT; unsigned int led_timer=0,led_rate=500; unsigned int display_timer=0; void initialize(void); void process_packet(void); void reset(void); void set_display_type(unsigned char type); void set_display_timer(void); void update_display(void); void set_display_timer(void); inline void set_display(unsigned int value); int main(void) { signed char ret; unsigned char data[RADIO_BUFFER_SIZE]={0}; unsigned char button_state=0x00; initialize(); set_display_type(DISP_TYPE_WINNER); while(1) { radio_exec(); ret=radio_receive(&rec_src,&rec_len,rec_buffer); if(ret==RET_RX_PACKET_REC)process_packet(); //Check Controller Input if(input_timer==0) { input_timer=INPUT_UPDATE_TIMEOUT; ret=controller_input_get(); //Was reset pressed? if(ret&CONTROL_RESET && !(button_state&CONTROL_RESET)) { resetting=1; reset_timer=RESET_TIMEOUT; set_display_type(DISP_TYPE_RESET); } else if(!(ret&CONTROL_RESET) && button_state&CONTROL_RESET) { if(resetting) { resetting=0; reset_timer=TIMER_OFF; set_display_type(DISP_TYPE_NONE); } } //Is the game running? if(!game_over) { //Are we aiming? if(ret&CONTROL_AIM && !(button_state&CONTROL_AIM) && current_player==RADIO_DEV_ADDR) { if(aim_remaining>0) { aiming=1; LASER_ON; set_display_type(DISP_TYPE_NONE); aim_timer=AIM_TICK_TIMEOUT; } } else if(!(ret&CONTROL_AIM) && button_state&CONTROL_AIM) { aiming=0; LASER_OFF; } //Are we aiming? if(aiming&&aim_timer==0) { aim_timer=AIM_TICK_TIMEOUT; if(aim_remaining>0)aim_remaining--; set_display(aim_remaining); //Are we done aiming? if(aim_remaining==0) { aiming=0; LASER_OFF; } } //Are we firing? if(ret&CONTROL_FIRE && !(button_state&CONTROL_FIRE)&& shots_taken>=1; else display_value=display_value<<1|0x01; if(display_value==0)display_dir=!display_dir; break; case DISP_TYPE_HIT: display_value<<=1; break; case DISP_TYPE_MISS: if(display_iter==3)display_value=0x070; else if(display_iter==2)display_value=0x180; else if(display_iter==1)display_value=0x200; break; case DISP_TYPE_RESET: display_value<<=1; display_value|=0x01; break; case DISP_TYPE_NONE: default: break; } led_set(display_value);//Set display value. } inline void set_display(unsigned int value) { unsigned int led; led=(1<0)radio_tx_timer--; if(radio_rx_timer!=RADIO_TIMER_OFF&&radio_rx_timer>0)radio_rx_timer--; if(aim_timer>0)aim_timer--; if(laser_timer!=TIMER_8_OFF&&laser_timer>0)laser_timer--; if(reset_timer!=TIMER_OFF&&reset_timer>0)reset_timer--; if(input_timer>0)input_timer--; if(led_timer>0)led_timer--; if(display_timer!=TIMER_OFF&&display_timer>0)display_timer--; }