From 74fa53a30abf54ebcf089e7c0a6a031d63d582ae Mon Sep 17 00:00:00 2001 From: dani Date: Thu, 6 Jul 2023 11:04:45 +0000 Subject: [PATCH] added unit stuffs --- .idea/inspectionProfiles/Project_Default.xml | 10 ++++ assets/hex3.gif | Bin 0 -> 1100 bytes assets/units/bob.gif | Bin 0 -> 910 bytes assets/units/tank.pal | 1 + assets/units/tank.png | Bin 0 -> 1110 bytes src/main.rs | 53 +++++++++++++++++-- src/unit.rs | 14 +++++ src/unit_kind.rs | 26 +++++++++ 8 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 assets/hex3.gif create mode 100644 assets/units/bob.gif create mode 100644 assets/units/tank.pal create mode 100644 assets/units/tank.png create mode 100644 src/unit.rs create mode 100644 src/unit_kind.rs diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/assets/hex3.gif b/assets/hex3.gif new file mode 100644 index 0000000000000000000000000000000000000000..cef8ba27fcbfb001aed4e290b1cee61984768af1 GIT binary patch literal 1100 zcmZ?wbhEHbOkglzXlG#9vT4gG8r~uB=ii^r}&@S&ow02*)hP?NY8+ok&%Hx z@t?SJQEFmIYKlU6W=V!ZKvBMeZ+=N;ejbD3PZn+lAkYC3pd7@&@tc8>L&jsnf`g3< zg|uQ$Y*=`>T|iWBj>pDDu8j*_GVh$&xcGR#f^*Rxk4;Ms_9z9fim|-3#JgJ~^3@8+{>PvFa4By2{wN(WxudJ3@DYm6cbahxy z?BQ!mPKB!=ZM^xu zXCxFKA7@~)7n80mN;*F6uim+w>H6tg8|;IRX;*!CcFD)r%Z+!EM)rc7_~$aaW_`VU zYthz6=l*Qn^yb>$+W-HgYsw!!Se~lv{-^LL?vn4lsZMLc;R_`y93#G%4I8ahY*~euTD2eTXtg(U_18$T+Mu zs8U!Z5jp31)^bR*SF&BO8L19o9o*e8YoP9gyd!eKbJp^_=D6gb;7O$82+zUog~>rR zLe@my^!(NGC(Z9Aqu@oPa|k1FMHmgW1M>d(H~kXrE$TAm4T|eTDdEe2cO7~So>JH> z<8Smo&|adxNclO%hr~$2s{uzG+6{6F^)k-WfBWC^LCQXg4q{)zqXAnS8V%MdtdVh+ zew_Ao>Q2gS6n7CT6Dk8L9ab1rC{)O+krzD2EZ@;ANFEe?45{Y#$V_!(O#hbgz`O#Hxgb9=yG_%pjBa`L@ncG`U%<*>LTSKid;ftK-M8+ zuvVc;VpW!_+jl>6aOaK#ySHrGTv<^8WdEtz*?aVG-_axW#bbRh)F0^WuHWC?cdYva zvP&yhFYAH_ZpUqdu;P(72hYqb3P1YvvyazqYuzwpf2=umdiwoqZ+(2`-3d|Fr(>e7Vg}Z5#(${{_1ssImY6 literal 0 HcmV?d00001 diff --git a/assets/units/tank.pal b/assets/units/tank.pal new file mode 100644 index 0000000..78a430e --- /dev/null +++ b/assets/units/tank.pal @@ -0,0 +1 @@ +ŒŠŒüþü¤¢¤”–”DBD¬®¬”’”|~|\Z\œžœ´²´ŒŽŒ¤¦¤ \ No newline at end of file diff --git a/assets/units/tank.png b/assets/units/tank.png new file mode 100644 index 0000000000000000000000000000000000000000..d7220c6fbd6aae46e8b3ccda32ab0c34ea1dd5dc GIT binary patch literal 1110 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V3GB7aSW-r^>)tcqQ?dzZT?1V zY}`y-T;CjjNwBdpvNCdWiLtQh@EDkAXz=K0d{7n<6A_Wp;n0al2uOHvQ|Cj*YK=`Q z@g;?y{u{FvT9UKKE?)5?zJ~GtNu@`Ss1~rJ3r@_iY*}66YAV%)D>@mZwpW zi6dXyQ2yENfA`SGm{`}5skzJLbLq;9sy#oK&N}~Y`|Y>??9;A4(y-ew|D?Oa z3hnuKcduG~P3mD%eBxHN88hB5w%Al{Z)|D3L z@%)uK-n;hgD!X^;T&_g^B|MmJFUAsAD)v`+F1+(9JF#ge#I^23yzxlwr^{03_N*`S!>mLW<xo&9IT!>y{{f4|;AL>, + last_tick: Instant, + tick_duration: Duration, + current_tick: i32 +} +fn setup_palette(ws: &mut WindowState) { + ws.set_palette(0, 0xc0, 0xf0, 0xd0); + ws.set_palette(2, 0x10, 0x30, 0x20); + ws.set_palette(1, 0xb0, 0xe0, 0xc0); + ws.set_palette(3, 0xa0, 0xd0, 0xb0); + + ws.set_palette(255, 0xff, 0xff, 0xff); + ws.set_palette(254, 0x00, 0x00, 0x00); + ws.set_palette(253, 0x80, 0x80, 0x80); + +} + +impl Game { + pub fn tick(&mut self, window_state: &mut WindowState) { + window_state.log(format!("tick: {}", self.current_tick).as_str()); + + self.unit.borrow_mut().pos.y = self.current_tick % self.map.size().y; + } } impl skunk2d::Game for Game { fn new(window_state: &mut WindowState) -> Self { - window_state.scramble_palette(); - Game {} + setup_palette(window_state); + let tileset = Tileset::load("assets/hex2.gif", Vec2{x: 2, y: 1}); + let kind = UnitKind::new("bob"); + Game { + map: HexMap::new(Vec2{x: 11, y: 11}, tileset, Vec2{ x: 23, y: 13 }), + unit: kind.spawn(Vec2{x: 5, y: 5}), + last_tick: Instant::now(), + tick_duration: Duration::from_secs(1) / 10, + current_tick: 0 + } } fn update(&mut self, window_state: &mut WindowState) { + if Instant::now() - self.last_tick >= self.tick_duration { + self.tick(window_state); + self.last_tick += self.tick_duration; + self.current_tick += 1; + } } fn on_event(&mut self, window_state: &mut WindowState, event: Event) { @@ -18,6 +63,8 @@ impl skunk2d::Game for Game { fn draw(&self, target: &mut Image) { target.clear(); + target.draw_hexmap(Vec2::zero(), &self.map); + self.unit.borrow().draw(target, &self.map); } } diff --git a/src/unit.rs b/src/unit.rs new file mode 100644 index 0000000..8c4fbb9 --- /dev/null +++ b/src/unit.rs @@ -0,0 +1,14 @@ +use std::rc::Rc; +use skunk2d::{HexMap, Image, Vec2}; +use crate::unit_kind::UnitKind; + +pub struct Unit { + pub kind: Rc, + pub pos: Vec2 +} + +impl Unit { + pub fn draw(&self, target: &mut Image, map: &HexMap) { + target.draw_image( map.coord_to_pixel(self.pos), &self.kind.sprite); + } +} \ No newline at end of file diff --git a/src/unit_kind.rs b/src/unit_kind.rs new file mode 100644 index 0000000..8fc38ec --- /dev/null +++ b/src/unit_kind.rs @@ -0,0 +1,26 @@ +use std::cell::RefCell; +use std::rc::Rc; +use skunk2d::{Image, Vec2}; +use crate::unit::Unit; + +pub struct UnitKind { + pub sprite: Rc, + pub name: String +} + +impl UnitKind { + pub fn new(name: &str) -> Rc { + UnitKind { + sprite: Image::load(format!("assets/units/{}.gif", name).as_str()), + name: name.into() + }.into() + } + + pub fn spawn(self: Rc, pos: Vec2) -> Rc> { + RefCell::new(Unit { + kind: self, + pos + }).into() + } +} +