126 lines
2.7 KiB
Plaintext
126 lines
2.7 KiB
Plaintext
// #scope_file
|
|
|
|
random :: #import "Random";
|
|
|
|
Color :: enum {
|
|
RED;
|
|
BLACK;
|
|
GREEN;
|
|
};
|
|
|
|
RouleMode :: enum {
|
|
WAITING;
|
|
ANIMATING;
|
|
DONE;
|
|
};
|
|
|
|
Slot :: struct {
|
|
color : Color;
|
|
number : int;
|
|
};
|
|
|
|
RouleTable :: struct {
|
|
animStart : float = -1;
|
|
angle : float = 0;
|
|
slot : Slot = .{};
|
|
mode : RouleMode = .WAITING;
|
|
};
|
|
|
|
tableState : RouleTable;
|
|
|
|
|
|
|
|
rouleSlots : []Slot = .[
|
|
.{.GREEN, 0},
|
|
.{.RED, 32},
|
|
.{.BLACK, 15},
|
|
.{.RED, 19},
|
|
.{.BLACK, 4},
|
|
.{.RED, 21},
|
|
.{.BLACK, 2},
|
|
.{.RED, 25},
|
|
.{.BLACK, 17},
|
|
.{.RED, 34},
|
|
.{.BLACK, 6},
|
|
.{.RED, 27},
|
|
.{.BLACK, 13},
|
|
.{.RED, 36},
|
|
.{.BLACK, 11},
|
|
.{.RED, 30},
|
|
.{.BLACK, 8},
|
|
.{.RED, 23},
|
|
.{.BLACK, 10},
|
|
.{.RED, 5},
|
|
.{.BLACK, 24},
|
|
.{.RED, 16},
|
|
.{.BLACK, 33},
|
|
.{.RED, 1},
|
|
.{.BLACK, 20},
|
|
.{.RED, 14},
|
|
.{.BLACK, 31},
|
|
.{.RED, 9},
|
|
.{.BLACK, 22},
|
|
.{.RED, 18},
|
|
.{.BLACK, 29},
|
|
.{.RED, 7},
|
|
.{.BLACK, 28},
|
|
.{.RED, 12},
|
|
.{.BLACK, 35},
|
|
.{.RED, 3},
|
|
.{.BLACK, 26},
|
|
];
|
|
|
|
get_roll_result :: () -> (Slot, float) {
|
|
slot := random.random_get() % rouleSlots.count.(u64);
|
|
return rouleSlots[xx slot], slot.(float) / rouleSlots.count.(float);
|
|
}
|
|
|
|
wheel_tex : Ui_Texture;
|
|
base_tex : Ui_Texture;
|
|
ball_tex : Ui_Texture;
|
|
|
|
WHEEL_SIZE :: 3.5;
|
|
|
|
get_ball :: () -> (ball_size: float, ball_speed: float) {
|
|
if tableState.mode == .WAITING {
|
|
return 4.7, -20;
|
|
} else if tableState.mode == .ANIMATING {
|
|
return lerp(4.7, 3, min(1.0, get_time().(float) - tableState.animStart.(float))), -20;
|
|
}
|
|
}
|
|
|
|
#scope_export
|
|
|
|
table_roll :: () {
|
|
tableState.animStart = get_time().(float);
|
|
tableState.slot, tableState.angle = get_roll_result();
|
|
tableState.mode = .ANIMATING;
|
|
}
|
|
|
|
table_init :: () {
|
|
img := create_texture_from_pack("./game/resources/roule-spin.png");
|
|
wheel_tex.tex = img;
|
|
img = create_texture_from_pack("./game/resources/roule.png");
|
|
base_tex.tex = img;
|
|
img = create_texture_from_pack("./game/resources/roule-ball.png");
|
|
ball_tex.tex = img;
|
|
}
|
|
|
|
draw_table :: () {
|
|
w,h := get_window_size();
|
|
uw := ui_w(10,0);
|
|
|
|
ball_size, ball_speed := get_ball();
|
|
|
|
diff := ball_size * uw - WHEEL_SIZE * uw;
|
|
set_shader_for_images(*base_tex);
|
|
immediate_rect((5-(WHEEL_SIZE/2)) * uw, 50,WHEEL_SIZE*uw,WHEEL_SIZE*uw);
|
|
immediate_flush();
|
|
set_shader_for_images(*wheel_tex);
|
|
immediate_rect((5-(WHEEL_SIZE/2)) * uw, 50,WHEEL_SIZE*uw,WHEEL_SIZE*uw, cast(float) get_time());
|
|
immediate_flush();
|
|
set_shader_for_images(*ball_tex);
|
|
immediate_rect((5-(ball_size/2)) * uw, 50 - diff/2 ,ball_size*uw,ball_size*uw, cast(float) (ball_size * -1 * get_time()));
|
|
immediate_flush();
|
|
}
|