Skip to content
Snippets Groups Projects
Commit 01d0b89a authored by Fang Lu's avatar Fang Lu
Browse files

Merge branch 'jxt-osufs' into ilufang-osufs

parents 2b7a095e f7760ede
No related branches found
No related tags found
No related merge requests found
#ifndef OSU_OBJECT_INCLUDES_H_
#define OSU_OBJECT_INCLUDES_H_
#include<inttypes>
typedef struct __attribute__((__packed__)) hit_circle_t{
//32 Byte
char type,
uint_16t x,y,
uint_32t start_timing,
uint_32t check_timing,
uint_32t disappear_timing,
//uint_32t end_timing,
uint_16t hit_radius,
uint_16t approach_radius,
uint_16t gradient_color1,
uint_16t gradient_color2,
uint_16t stroke_color,
uint_8t gradient_direction,
uint_32t reserved
}elem_hit_circle;
typedef struct __attribute__((__packed__)) hit_circle_t{
//32 Byte
char type,
uint_16t x,y,
uint_32t start_timing,
uint_32t disappear_timing,
uint_16t radius,
uint_16t gradient_color1,
uint_16t gradient_color2,
uint_16t stroke_color,
uint_8t gradient_direction,
char padding[10]
}elem_spinner;
/*typedef struct __attribute__((__packed__)) rect_slider_t{
char type;
uint_32t start_timing,
uint_32t check_timing,
uint_32t disappear_timing,
//uint_32t end_timing,
uint_16t hit_radius,
uint_16t approach_radius,
uint_16t x1,y1,x2,y2,x3,y3,x4,y4,
uint_8t gradient_direction,
uint_32t reserved
}elem_rect_slider;*/
#endif
\ No newline at end of file
......@@ -102,8 +102,11 @@ int osu_parse_hit_circle(vector<string>& v, elem_hit_circle* elemn,osu_song* son
sscanf(v[2],"%ld",&(elemn -> check_timing));
elemn -> start_timing = check_timing - ((osu_song->approach_rate*(-140))+1800);
elemn -> disappear_timing = check_timing + (200-(osu_song->difficulty)*10);
//TBD
//elemn -> end_timing
elemn -> hit_radius = 100 - (osu_song ->difficulty) * 4;
elemn -> approach_radius = 3*(elemn->hit_radius);
elemn -> approach_rate = (elemn->approach_radius-elemn->hit_radius)/(elemn->check_timing-elemn->start_timing);
elemn -> stroke_color = 0xFFFF;
}
......
......@@ -13,12 +13,13 @@ void osu_draw_frame(osu_session* global){
case 'h': // hit circle
osu_draw_hit_circle((global->draw_dynamic_queue)[temp_queue_end],global->current_time);
break;
case 's':
osu_draw_spin(draw_dynamic_queue[temp_queue_end]);
break;
/* case 'l': // slider
osu_draw_slider(draw_dynamic_queue[temp_queue_end]);
break;
case 's':
osu_draw_spin(draw_dynamic_queue[temp_queue_end]);
break;*/
*/
}
--temp_queue_end;
temp_queue_end &= DRAW_QUEUE_SIZE_MODE;
......@@ -35,6 +36,7 @@ void osu_draw_hit_circle(elem_hit_circle* circle,clock_t current_time){
circle->x,
circle->y,
circle->approach_radius,
4,
circle->gradient_color1
);
gl_circle(
......@@ -46,11 +48,16 @@ void osu_draw_hit_circle(elem_hit_circle* circle,clock_t current_time){
circle->stroke_color,
circle->gradient_direction
);
gl_ring(
circle->x,
circle->y,
circle->hit_radius,
3,
0xFFFFFFFF
);
circle->approach_radius -= circle->approach_rate;
if (circle->approach_radius<0)
circle->approach_radius=0;
} else if (current_time < disappear_timing){
} else if (current_time < end_timing){
gl_circle(
circle->x,
circle->y,
......
#include "osu_process.h"
void init_process(osu_session* global){
\
global->draw_queue = malloc(sizeof(void*)*DRAW_QUEUE_SIZE);
global->buff = malloc(512);
global->play_timeline = malloc(65536);
......@@ -26,20 +26,21 @@ void loading_process(osu_session* global){
*(global->play_timeline));
//beat map parsing
uint32_t* p_temp = *(global->play_timeline);
global->play_timeline_count = *((uint32_t*)p_temp);
global->play_timeline = malloc(4*(global->play_timeline_count));
//locate the real data address
++p_temp;
if ((*p_temp)!= 0b01110010011001010110000101101100){
printf("parsing magic failed!");
return;
}
++p_temp;
global->play_timeline_count = *((uint32_t*)p_temp);
global->play_timeline = malloc(4*(global->play_timeline_count));
//locate the real data address
++p_temp;
for (i=0;i<global->play_timeline_count;++i){
global->play_timeline[i] = p_temp;
//jump 32 bytes
p_temp+=((void*)p_temp + ELEMENT_LENGTH);
p_temp =((void*)p_temp + ELEMENT_LENGTH);
}
}
......@@ -99,7 +100,7 @@ void osu_draw_queue_update(osu_session* global){
queue_temp_start = global->draw_dynamic_queue_start;
elem_hit_circle* element_temp_p = (global->draw_dynamic_queue)[queue_temp_start];
while (queue_temp_start!=global->draw_dynamic_queue_end){
if (global->current_time >= (element_temp_p->end_timing)){
if (global->current_time >= (element_temp_p->disappear_timing)){
//pop draw element from front
(global->draw_dynamic_queue)[queue_temp_start] = NULL;
++(global->draw_dynamic_queue_start);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment