inital working setup
This commit is contained in:
122
src/main.rs
Normal file
122
src/main.rs
Normal file
@@ -0,0 +1,122 @@
|
||||
use embedded_graphics::{
|
||||
mono_font::{MonoTextStyle, ascii::FONT_6X10},
|
||||
pixelcolor::Gray8,
|
||||
};
|
||||
use image::{GrayImage, Pixel, RgbImage};
|
||||
|
||||
pub mod display;
|
||||
pub mod killinfo;
|
||||
pub mod model;
|
||||
pub mod services;
|
||||
use crate::killinfo::KillInfo;
|
||||
use crate::services::esi_static::EsiClient;
|
||||
use crate::services::zkill::ZkillClient;
|
||||
|
||||
fn rgb_to_gray8(img: &RgbImage) -> GrayImage {
|
||||
let mut gray = GrayImage::new(img.width(), img.height());
|
||||
for (x, y, pixel) in img.enumerate_pixels() {
|
||||
let luma = pixel.to_luma()[0]; // simple conversion
|
||||
gray.put_pixel(x, y, image::Luma([luma]));
|
||||
}
|
||||
gray
|
||||
}
|
||||
|
||||
// Example function to render kill info on a display buffer
|
||||
fn render_killmails(killmails: &[KillInfo], buffer: &mut GrayImage, x_off: i64) {
|
||||
let mut y_offset = 0;
|
||||
|
||||
for k in killmails {
|
||||
// Draw victim portrait
|
||||
|
||||
if let Some(alli) = &k.victim.alliance {
|
||||
let logo = &alli.logo;
|
||||
let gray_logo = rgb_to_gray8(logo);
|
||||
// copy portrait into buffer at (0, y_offset)
|
||||
image::imageops::overlay(buffer, &gray_logo, x_off + 0, y_offset as i64);
|
||||
}
|
||||
|
||||
if let Some(ship) = &k.victim.ship {
|
||||
let icon = &ship.icon;
|
||||
let gray_icon = rgb_to_gray8(icon);
|
||||
// copy portrait into buffer at (0, y_offset)
|
||||
image::imageops::overlay(buffer, &gray_icon, x_off + 64, y_offset as i64);
|
||||
}
|
||||
|
||||
// Draw victim name
|
||||
//let text_style = MonoTextStyle::new(&FONT_6X10, Gray8::new(255));
|
||||
// You can use embedded_graphics Text or a real framebuffer draw function
|
||||
// Example with embedded_graphics (requires DrawTarget)
|
||||
// Text::new(&k.victim.character.name, Point::new(50, y_offset as i32), text_style)
|
||||
// .draw(display)?;
|
||||
|
||||
// Draw system name and value
|
||||
println!(
|
||||
"{} {:.2}M ISK in {}",
|
||||
k.victim.character.name,
|
||||
k.total_value / 1_000_000.0,
|
||||
k.system_name
|
||||
);
|
||||
|
||||
// Advance y offset
|
||||
y_offset += 60; // adjust spacing
|
||||
if y_offset >= buffer.height() as usize {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Simulated 800x480 grayscale display buffer
|
||||
let mut buffer = GrayImage::new(800, 480);
|
||||
|
||||
let esi = EsiClient::new();
|
||||
let zkill = ZkillClient::new();
|
||||
|
||||
let past_seconds = 60 * 60 * 24;
|
||||
let my_corp_id = 98685373;
|
||||
|
||||
let mut display = display::Display::new();
|
||||
|
||||
let response = zkill
|
||||
.get_corporation_kills(my_corp_id, past_seconds)
|
||||
.unwrap();
|
||||
let mut builder = killinfo::KillInfoBuilder::new();
|
||||
builder.set_corporation_id(my_corp_id);
|
||||
|
||||
let killmails: Vec<KillInfo> = response
|
||||
.iter()
|
||||
.map(|r| builder.make_kill_info(&zkill, &esi, r).unwrap())
|
||||
.collect();
|
||||
|
||||
|
||||
|
||||
for (i,k) in killmails.iter().enumerate() {
|
||||
let ii = i as i32;
|
||||
let y : i32 = ii * 60;
|
||||
|
||||
display.draw_kill_info(k, 0, y);
|
||||
}
|
||||
|
||||
let response = zkill
|
||||
.get_corporation_losses(my_corp_id, past_seconds)
|
||||
.unwrap();
|
||||
let mut builder = killinfo::KillInfoBuilder::new();
|
||||
builder.set_corporation_id(my_corp_id);
|
||||
|
||||
let killmails: Vec<KillInfo> = response
|
||||
.iter()
|
||||
.map(|r| builder.make_kill_info(&zkill, &esi, r).unwrap())
|
||||
.collect();
|
||||
|
||||
for (i,k) in killmails.iter().enumerate() {
|
||||
let ii = i as i32;
|
||||
let y : i32 = ii * 60;
|
||||
|
||||
display.draw_kill_info(k, 400, y);
|
||||
}
|
||||
|
||||
display.flush();;
|
||||
|
||||
// Save buffer for debugging
|
||||
buffer.save("killmails_display.png").unwrap();
|
||||
}
|
||||
Reference in New Issue
Block a user