aboutsummaryrefslogtreecommitdiff
path: root/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'renderer')
-rw-r--r--renderer/src/map.rs46
1 files changed, 20 insertions, 26 deletions
diff --git a/renderer/src/map.rs b/renderer/src/map.rs
index f687809..8ce932f 100644
--- a/renderer/src/map.rs
+++ b/renderer/src/map.rs
@@ -2,7 +2,7 @@ use std::collections::HashMap;
use log::{info, warn};
use skia_safe::{
- canvas::SrcRectConstraint, Canvas, Color4f, ColorSpace, ISize, Image, Paint, Rect,
+ canvas::SrcRectConstraint, BlendMode, Canvas, Color4f, ColorSpace, ISize, Image, Paint, Rect,
};
use twclient::world::{
map::{format, TILE_NUM},
@@ -39,8 +39,8 @@ impl MapRenderer {
&skia_safe::ImageInfo::new(
ISize::new(t.dim().0 as i32, t.dim().1 as i32),
skia_safe::ColorType::RGBA8888,
- skia_safe::AlphaType::Opaque,
- None,
+ skia_safe::AlphaType::Premul,
+ ColorSpace::new_srgb_linear(),
),
d,
t.dim().0 * 4,
@@ -68,28 +68,22 @@ impl MapRenderer {
.map(|t| (t.x / 32, t.y / 32))
.unwrap_or((0, 0));
- let tile_rect = Rect {
- top: center.1 as f32 * TILE_SIZE,
- left: center.0 as f32 * TILE_SIZE,
- bottom: center.1 as f32 * TILE_SIZE + TILE_SIZE,
- right: center.0 as f32 * TILE_SIZE + TILE_SIZE,
- };
- canvas.draw_rect(tile_rect, &grid_paint);
-
for l in &world.map.layers {
- let tileset = match world.map.tilesets.get(&l.image) {
- Some(t) => t,
- None => {
- warn!("missing tileset for {:?}, skipping layer", l.image);
- continue;
- }
- };
- if tileset.dim() == (1, 1) {
- continue;
- }
+ let tileset = self.tileset.get(&l.image).unwrap();
+
+ let mut layer_tint = Paint::new(
+ Color4f {
+ a: 0.0,
+ b: 0.0,
+ g: 0.0,
+ r: 0.0,
+ },
+ &ColorSpace::new_srgb(),
+ );
+ layer_tint.set_style(skia_safe::PaintStyle::Fill);
+ layer_tint.set_blend_mode(BlendMode::Multiply);
+ layer_tint.set_argb(l.color.alpha, l.color.red, l.color.green, l.color.blue);
- // let magic = (186, 50);
- // println!("{:?} {:?}", center, l.tiles.dim());
for layer_y in (center.1 - 15)..(center.1 + 15) {
for layer_x in (center.0 - 15)..(center.0 + 15) {
let layer_x = layer_x.try_into().unwrap_or(0);
@@ -101,7 +95,7 @@ impl MapRenderer {
bottom: layer_y as f32 * TILE_SIZE + TILE_SIZE,
right: layer_x as f32 * TILE_SIZE + TILE_SIZE,
};
- canvas.draw_rect(tile_rect, &grid_paint);
+ // canvas.draw_rect(tile_rect, &grid_paint);
let tile = match l.tiles.get((layer_y, layer_x)) {
Some(t) => t,
@@ -120,7 +114,7 @@ impl MapRenderer {
const TL: u32 = 64;
canvas.draw_image_rect(
- self.tileset.get(&l.image).unwrap(),
+ tileset,
Some((
&Rect {
top: (tile_y * TL) as f32,
@@ -131,7 +125,7 @@ impl MapRenderer {
SrcRectConstraint::Strict,
)),
tile_rect,
- &Paint::default(),
+ &layer_tint,
);
}
}