Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion TrackRender/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ int load_groups(json_t* json,uint64_t* out)
else if(strcmp(json_string_value(group_name),"diagonal_brakes") ==0)groups|=TRACK_GROUP_DIAGONAL_BRAKES;
else if(strcmp(json_string_value(group_name),"sloped_brakes") ==0)groups|=TRACK_GROUP_SLOPED_BRAKES;
else if(strcmp(json_string_value(group_name),"magnetic_brakes") ==0)groups|=TRACK_GROUP_MAGNETIC_BRAKES;
else if(strcmp(json_string_value(group_name),"turns") ==0)groups|=TRACK_GROUP_TURNS;
else if (strcmp(json_string_value(group_name), "very_small_turns") == 0)groups |= TRACK_GROUP_VERY_SMALL_TURNS;
else if(strcmp(json_string_value(group_name),"turns") ==0)groups|=TRACK_GROUP_TURNS;
else if(strcmp(json_string_value(group_name),"gentle_slopes") ==0)groups|=TRACK_GROUP_GENTLE_SLOPES;
else if(strcmp(json_string_value(group_name),"steep_slopes") ==0)groups|=TRACK_GROUP_STEEP_SLOPES;
else if(strcmp(json_string_value(group_name),"vertical_slopes") ==0)groups|=TRACK_GROUP_VERTICAL_SLOPES;
Expand Down
9 changes: 9 additions & 0 deletions TrackRender/src/track.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -927,6 +927,15 @@ uint64_t groups=0;
write_track_section(context,&(track_list.large_turn_right_to_diag),track_type,base_dir,output_path,sprites,subtype,NULL);
}


//very_small_Turns
if (groups & TRACK_GROUP_VERY_SMALL_TURNS)
{
sprintf(output_path, "%.255svery_small_turn_left%s", output_dir, suffix);
write_track_section(context, &(track_list.very_small_turn_left), track_type, base_dir, output_path, sprites, subtype, NULL);
}


//Diagonals
if(groups&TRACK_GROUP_DIAGONALS)
{
Expand Down
85 changes: 45 additions & 40 deletions TrackRender/src/track.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,45 +90,47 @@ enum track_subtypes
TRACK_SUBTYPE_LIFT=1,
};

enum track_groups
enum track_groups : uint64_t
{
TRACK_GROUP_FLAT=0x1,
TRACK_GROUP_BRAKES=0x2,
TRACK_GROUP_GENTLE_SLOPES=0x4,
TRACK_GROUP_STEEP_SLOPES=0x8,
TRACK_GROUP_VERTICAL_SLOPES=0x10,
TRACK_GROUP_TURNS=0x20,
TRACK_GROUP_SLOPED_TURNS=0x40,
TRACK_GROUP_DIAGONALS=0x80,
TRACK_GROUP_BANKED_TURNS=0x100,
TRACK_GROUP_BANKED_SLOPED_TURNS=0x200,
TRACK_GROUP_S_BENDS=0x400,
TRACK_GROUP_HELICES=0x800,
TRACK_GROUP_LARGE_SLOPE_TRANSITIONS=0x1000,
TRACK_GROUP_BARREL_ROLLS=0x2000,
TRACK_GROUP_INLINE_TWISTS=0x4000,
TRACK_GROUP_HALF_LOOPS=0x8000,
TRACK_GROUP_QUARTER_LOOPS=0x10000,
TRACK_GROUP_CORKSCREWS=0x20000,
TRACK_GROUP_LARGE_CORKSCREWS=0x40000,
TRACK_GROUP_BOOSTERS=0x80000,
TRACK_GROUP_LAUNCHED_LIFTS=0x100000,
TRACK_GROUP_TURN_BANK_TRANSITIONS=0x200000,
TRACK_GROUP_MEDIUM_HALF_LOOPS=0x400000,
TRACK_GROUP_LARGE_HALF_LOOPS=0x800000,
TRACK_GROUP_ZERO_G_ROLLS=0x1000000,
TRACK_GROUP_SMALL_SLOPE_TRANSITIONS=0x2000000,
TRACK_GROUP_STEEP_SLOPED_TURNS=0x4000000,
TRACK_GROUP_LARGE_SLOPED_TURNS=0x8000000,
TRACK_GROUP_LARGE_BANKED_SLOPED_TURNS=0x10000000,
TRACK_GROUP_VERTICAL_LOOPS=0x20000000,
TRACK_GROUP_VERTICAL_BOOSTERS=0x40000000,
TRACK_GROUP_DIAGONAL_BRAKES=0x80000000,
TRACK_GROUP_SLOPED_BRAKES=0x100000000,
TRACK_GROUP_MAGNETIC_BRAKES=0x200000000,
TRACK_GROUP_DIAGONAL_VERTICALS=0x400000000,
TRACK_GROUP_BANKED_S_BENDS=0x800000000,
TRACK_GROUP_BLOCK_BRAKES=0x1000000000,
TRACK_GROUP_FLAT = 0x1,
TRACK_GROUP_BRAKES = 0x2,
TRACK_GROUP_GENTLE_SLOPES = 0x4,
TRACK_GROUP_STEEP_SLOPES = 0x8,
TRACK_GROUP_VERTICAL_SLOPES = 0x10,
TRACK_GROUP_TURNS = 0x20,
TRACK_GROUP_SLOPED_TURNS = 0x40,
TRACK_GROUP_DIAGONALS = 0x80,
TRACK_GROUP_BANKED_TURNS = 0x100,
TRACK_GROUP_BANKED_SLOPED_TURNS = 0x200,
TRACK_GROUP_S_BENDS = 0x400,
TRACK_GROUP_HELICES = 0x800,
TRACK_GROUP_LARGE_SLOPE_TRANSITIONS = 0x1000,
TRACK_GROUP_BARREL_ROLLS = 0x2000,
TRACK_GROUP_INLINE_TWISTS = 0x4000,
TRACK_GROUP_HALF_LOOPS = 0x8000,
TRACK_GROUP_QUARTER_LOOPS = 0x10000,
TRACK_GROUP_CORKSCREWS = 0x20000,
TRACK_GROUP_LARGE_CORKSCREWS = 0x40000,
TRACK_GROUP_BOOSTERS = 0x80000,
TRACK_GROUP_LAUNCHED_LIFTS = 0x100000,
TRACK_GROUP_TURN_BANK_TRANSITIONS = 0x200000,
TRACK_GROUP_MEDIUM_HALF_LOOPS = 0x400000,
TRACK_GROUP_LARGE_HALF_LOOPS = 0x800000,
TRACK_GROUP_ZERO_G_ROLLS = 0x1000000,
TRACK_GROUP_SMALL_SLOPE_TRANSITIONS = 0x2000000,
TRACK_GROUP_STEEP_SLOPED_TURNS = 0x4000000,
TRACK_GROUP_LARGE_SLOPED_TURNS = 0x8000000,
TRACK_GROUP_LARGE_BANKED_SLOPED_TURNS = 0x10000000,
TRACK_GROUP_VERTICAL_LOOPS = 0x20000000,
TRACK_GROUP_VERTICAL_BOOSTERS = 0x40000000,
TRACK_GROUP_DIAGONAL_BRAKES = 0x80000000,
TRACK_GROUP_SLOPED_BRAKES = 0x100000000,
TRACK_GROUP_MAGNETIC_BRAKES = 0x200000000,
TRACK_GROUP_DIAGONAL_VERTICALS = 0x400000000,
TRACK_GROUP_BANKED_S_BENDS = 0x800000000,
TRACK_GROUP_BLOCK_BRAKES = 0x1000000000,
TRACK_GROUP_VERY_SMALL_TURNS = 0x2000000000

};

enum models
Expand Down Expand Up @@ -241,6 +243,7 @@ typedef struct
track_section_t steep_to_vertical_up;
track_section_t vertical_to_steep_up;
track_section_t vertical;
track_section_t very_small_turn_left;
track_section_t small_turn_left;
track_section_t medium_turn_left;
track_section_t large_turn_left_to_diag;
Expand Down Expand Up @@ -368,8 +371,10 @@ typedef struct
track_section_t vertical_twist_right_to_orthogonal_up;

track_section_t vertical_booster;

}track_list_t;


}
track_list_t;

extern track_list_t track_list_default;
extern track_list_t track_list_semi_split;
Expand Down
32 changes: 32 additions & 0 deletions TrackRender/src/track_sections.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,31 @@ track_point_t large_turn_right_to_diag_bank_curve(float distance)
return banked_curve(large_turn_right_to_diag_curve(distance),-BANK_ANGLE);
}

track_point_t very_small_turn_left_curve(float distance)
{
float angle = distance / (0.5 * TILE_SIZE);
track_point_t point;
point.position = vector3(0.5 * TILE_SIZE * (1.0 - cos(angle)), 0, 0.5 * TILE_SIZE * sin(angle));
point.tangent = vector3(sin(angle), 0.0, cos(angle));
point.normal = vector3(0.0, 1.0, 0.0);
point.binormal = vector3_cross(point.tangent, point.normal);
return point;
}
track_point_t very_small_turn_right_curve(float distance)
{
float angle = distance / (0.5 * TILE_SIZE);
track_point_t point;
point.position = vector3(0.5 * TILE_SIZE * (cos(angle) - 1.0), 0, 0.5 * TILE_SIZE * sin(angle));
point.tangent = vector3(-sin(angle), 0.0, cos(angle));
point.normal = vector3(0.0, 1.0, 0.0);
point.binormal = vector3_cross(point.normal, point.tangent);
return point;
}





track_point_t sloped_turn_left_curve(float radius,float gradient,float distance)
{
float arclength=radius*sqrt(1.0+gradient*gradient);
Expand Down Expand Up @@ -9319,6 +9344,11 @@ const track_section_t vertical_to_steep_up={TRACK_VERTICAL|TRACK_NO_SUPPORTS|TRA
const track_section_t vertical={TRACK_VERTICAL|TRACK_NO_SUPPORTS|TRACK_SPECIAL_VERTICAL,vertical_curve,VERTICAL_LENGTH,{{0,1,NULL},{0,1,NULL},{0,1,NULL},{0,1,NULL}}};
const track_section_t vertical_booster={TRACK_VERTICAL|TRACK_NO_SUPPORTS|TRACK_SPECIAL_VERTICAL_BOOSTER,vertical_curve,VERTICAL_LENGTH,{{0,1,NULL},{0,1,NULL},{0,1,NULL},{0,1,NULL}}};



//very small Turns

const track_section_t very_small_turn_left = { TRACK_EXIT_90_DEG_LEFT,very_small_turn_left_curve,VERY_SMALL_TURN_LENGTH,{{0,1,NULL},{0,1,NULL},{0,1,NULL},{0,1,NULL}} };
//Turns
rect_t small_turn_left_rects[165]={
{INT32_MIN,-1,INT32_MAX,INT32_MAX},
Expand Down Expand Up @@ -18851,6 +18881,7 @@ track_list_t track_list_default={
steep_to_vertical_up,
vertical_to_steep_up,
vertical,
very_small_turn_left,
small_turn_left,
medium_turn_left,
large_turn_left_to_diag,
Expand Down Expand Up @@ -19000,6 +19031,7 @@ track_list_t track_list_semi_split={
steep_to_vertical_up,
vertical_to_steep_up,
vertical,
very_small_turn_left,
small_turn_left,
medium_turn_left,
large_turn_left_to_diag,
Expand Down