aboutsummaryrefslogtreecommitdiff
path: root/renderer/src/tee.rs
diff options
context:
space:
mode:
Diffstat (limited to 'renderer/src/tee.rs')
-rw-r--r--renderer/src/tee.rs206
1 files changed, 0 insertions, 206 deletions
diff --git a/renderer/src/tee.rs b/renderer/src/tee.rs
deleted file mode 100644
index 4d9d945..0000000
--- a/renderer/src/tee.rs
+++ /dev/null
@@ -1,206 +0,0 @@
-use std::{collections::BTreeMap, fs::File, io::Read};
-
-use skia_safe::{
- canvas::SrcRectConstraint, utils::text_utils::Align, Canvas, Color4f, ColorSpace, Data, Font,
- Image, Paint, Point, Rect,
-};
-use twclient::world::{tee::Tee, World};
-
-// const TEE_COLL_RADIUS: f32 = 16.0;
-const TEE_REND_RADIUS: f32 = 32.0;
-const TEE_EYE_ROTATION_RADIUS: f32 = 8.0;
-const TEE_EYE_SIZE: f32 = 12.0;
-const TEE_EYE_DISTANCE: f32 = 8.0;
-const TEE_FOOT_SIZE: f32 = 14.0;
-const TEE_EYE_OFFSET_Y: f32 = -2.0;
-
-pub struct TeeRenderer {
- skins: BTreeMap<String, Image>,
-}
-
-impl TeeRenderer {
- pub fn new() -> Self {
- Self {
- skins: BTreeMap::new(),
- }
- }
-
- pub fn draw(&mut self, world: &World, canvas: &mut Canvas) {
- for t in world.tees.inner.values() {
- canvas.save();
- canvas.translate((t.x as f32, t.y as f32));
- self.draw_tee(canvas, t);
- canvas.restore();
- }
- }
-
- pub fn draw_tee(&mut self, canvas: &mut Canvas, tee: &Tee) {
- let tee_paint = Paint::new(
- Color4f {
- a: 1.0,
- r: 1.0,
- g: 1.0,
- b: 1.0,
- },
- &ColorSpace::new_srgb(),
- );
- let name_paint = Paint::new(
- Color4f {
- a: 1.0,
- r: 1.0,
- g: 1.0,
- b: 0.0,
- },
- &ColorSpace::new_srgb(),
- );
- let skin_texture = self
- .skins
- .entry(tee.skin.clone())
- .or_insert_with(|| TeeRenderer::load_skin(tee.name.as_str()).unwrap());
-
- let origin = Point {
- x: tee.x as f32,
- y: tee.y as f32,
- };
-
- {
- canvas.save();
-
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_FOOT, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_FOOT_SIZE + TEE_REND_RADIUS * 0.5,
- left: -TEE_FOOT_SIZE * 2.0 - TEE_FOOT_SIZE * 0.5,
- right: TEE_FOOT_SIZE * 2.0 - TEE_FOOT_SIZE * 0.5,
- bottom: TEE_FOOT_SIZE + TEE_REND_RADIUS * 0.5,
- },
- &tee_paint,
- );
-
- canvas.restore();
- }
-
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_BODY_SHADOW, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_REND_RADIUS,
- left: -TEE_REND_RADIUS,
- right: TEE_REND_RADIUS,
- bottom: TEE_REND_RADIUS,
- },
- &tee_paint,
- );
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_BODY, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_REND_RADIUS,
- left: -TEE_REND_RADIUS,
- right: TEE_REND_RADIUS,
- bottom: TEE_REND_RADIUS,
- },
- &tee_paint,
- );
-
- {
- canvas.save();
- // println!("{}", tee.angle);
- canvas.translate((
- tee.angle.cos() * TEE_EYE_ROTATION_RADIUS,
- tee.angle.sin() * TEE_EYE_ROTATION_RADIUS,
- ));
-
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_EYE_NORMAL, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_EYE_SIZE + TEE_EYE_OFFSET_Y,
- left: -TEE_EYE_SIZE - TEE_EYE_DISTANCE / 2.0,
- right: TEE_EYE_SIZE - TEE_EYE_DISTANCE / 2.0,
- bottom: TEE_EYE_SIZE + TEE_EYE_OFFSET_Y,
- },
- &tee_paint,
- );
- {
- canvas.save();
- canvas.scale((-1.0, 1.0));
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_EYE_NORMAL, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_EYE_SIZE + TEE_EYE_OFFSET_Y,
- left: -TEE_EYE_SIZE - TEE_EYE_DISTANCE / 2.0,
- right: TEE_EYE_SIZE - TEE_EYE_DISTANCE / 2.0,
- bottom: TEE_EYE_SIZE + TEE_EYE_OFFSET_Y,
- },
- &tee_paint,
- );
- canvas.restore();
- }
-
- canvas.restore();
- }
- {
- canvas.save();
-
- canvas.draw_image_rect(
- &skin_texture,
- Some((&SKIN_FOOT, SrcRectConstraint::Strict)),
- Rect {
- top: -TEE_FOOT_SIZE + TEE_REND_RADIUS * 0.5,
- left: -TEE_FOOT_SIZE * 2.0 + TEE_FOOT_SIZE * 0.5,
- right: TEE_FOOT_SIZE * 2.0 + TEE_FOOT_SIZE * 0.5,
- bottom: TEE_FOOT_SIZE + TEE_REND_RADIUS * 0.5,
- },
- &tee_paint,
- );
-
- canvas.restore();
- }
-
- canvas.draw_str_align(
- tee.name.as_str(),
- (origin.x, origin.y - 20.0),
- &Font::default(),
- &name_paint,
- Align::Center,
- );
- }
-
- pub fn load_skin(_name: &str) -> Option<Image> {
- // let path = "/usr/share/ddnet/data/skins/limekitty.png";
- let path = "/home/muffin/.teeworlds/downloadedskins/limekittygirl.png";
- let mut file = File::open(path).unwrap();
- let mut data = Vec::new();
- file.read_to_end(&mut data).unwrap();
- let data = Data::new_copy(&data);
- Image::from_encoded(data)
- }
-}
-
-const SKIN_BODY: Rect = Rect {
- top: 0.0,
- left: 0.0,
- right: 96.0,
- bottom: 96.0,
-};
-const SKIN_BODY_SHADOW: Rect = Rect {
- top: 0.0,
- left: 96.0,
- right: 192.0,
- bottom: 96.0,
-};
-const SKIN_FOOT: Rect = Rect {
- left: 196.0,
- right: 256.0,
- top: 32.0,
- bottom: 64.0,
-};
-const SKIN_EYE_NORMAL: Rect = Rect {
- left: 64.0,
- right: 96.0,
- top: 96.0,
- bottom: 128.0,
-};