draw slider bodies in the timeline
This commit is contained in:
parent
300208e21a
commit
47ebc63acc
1 changed files with 29 additions and 2 deletions
|
@ -1,10 +1,10 @@
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use ggez::{
|
use ggez::{
|
||||||
graphics::{self, Color, DrawParam, Mesh, Rect, WHITE},
|
graphics::{self, Color, DrawMode, DrawParam, LineCap, Mesh, Rect, StrokeOptions, WHITE},
|
||||||
nalgebra::Point2,
|
nalgebra::Point2,
|
||||||
Context,
|
Context,
|
||||||
};
|
};
|
||||||
use libosu::TimingPointKind;
|
use libosu::{HitObjectKind, TimingPointKind};
|
||||||
|
|
||||||
use crate::hit_object::HitObjectExt;
|
use crate::hit_object::HitObjectExt;
|
||||||
|
|
||||||
|
@ -131,6 +131,33 @@ impl Game {
|
||||||
let timeline_percent = (ho_time - timeline_left) / (timeline_right - timeline_left);
|
let timeline_percent = (ho_time - timeline_left) / (timeline_right - timeline_left);
|
||||||
let timeline_x = timeline_percent as f32 * BOUNDS.w + BOUNDS.x;
|
let timeline_x = timeline_percent as f32 * BOUNDS.w + BOUNDS.x;
|
||||||
let timeline_y = BOUNDS.y;
|
let timeline_y = BOUNDS.y;
|
||||||
|
|
||||||
|
// draw the slider body on the timeline first
|
||||||
|
if let HitObjectKind::Slider(info) = &ho.inner.kind {
|
||||||
|
let end_time = self
|
||||||
|
.beatmap
|
||||||
|
.inner
|
||||||
|
.get_hitobject_end_time(&ho.inner)
|
||||||
|
.as_seconds();
|
||||||
|
let tail_percent = (end_time - timeline_left) / (timeline_right - timeline_left);
|
||||||
|
let tail_x = tail_percent as f32 * BOUNDS.w + BOUNDS.x;
|
||||||
|
let body_y = BOUNDS.y + BOUNDS.h / 2.0;
|
||||||
|
|
||||||
|
let mut color = color;
|
||||||
|
color.a = 0.5;
|
||||||
|
let body = Mesh::new_polyline(
|
||||||
|
ctx,
|
||||||
|
DrawMode::Stroke(
|
||||||
|
StrokeOptions::default()
|
||||||
|
.with_line_width(BOUNDS.h)
|
||||||
|
.with_line_cap(LineCap::Round),
|
||||||
|
),
|
||||||
|
&[Point2::new(timeline_x, body_y), Point2::new(tail_x, body_y)],
|
||||||
|
color,
|
||||||
|
)?;
|
||||||
|
graphics::draw(ctx, &body, DrawParam::default())?;
|
||||||
|
}
|
||||||
|
|
||||||
self.skin.hitcircle.draw(
|
self.skin.hitcircle.draw(
|
||||||
ctx,
|
ctx,
|
||||||
(BOUNDS.h, BOUNDS.h),
|
(BOUNDS.h, BOUNDS.h),
|
||||||
|
|
Loading…
Reference in a new issue