Fix fish draws and orbiting particles
This commit is contained in:
parent
c1aacab5f3
commit
87a2815a26
2 changed files with 29 additions and 26 deletions
|
@ -1,5 +1,5 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ops::{Add, AddAssign, Mul, Sub};
|
use std::ops::{Add, AddAssign, Mul, Sub, SubAssign};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -126,6 +126,13 @@ impl AddAssign<Vector> for Vector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SubAssign<Vector> for Vector {
|
||||||
|
fn sub_assign(&mut self, rhs: Vector) {
|
||||||
|
self.x -= rhs.x;
|
||||||
|
self.y -= rhs.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Mul<f32> for Vector {
|
impl Mul<f32> for Vector {
|
||||||
type Output = Vector;
|
type Output = Vector;
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ const HEIGHT_F: f32 = 600.0;
|
||||||
const MUSIC2_LENGTH: f32 = 2.0 * 60.0 * 1000.0;
|
const MUSIC2_LENGTH: f32 = 2.0 * 60.0 * 1000.0;
|
||||||
const TEXT_RATE: f32 = 0.1;
|
const TEXT_RATE: f32 = 0.1;
|
||||||
const PP_GEN_RATE: f32 = 0.075;
|
const PP_GEN_RATE: f32 = 0.075;
|
||||||
const PARTICLE_RAND_VEL_RANGE: f32 = 0.2;
|
const PARTICLE_RAND_VEL_RANGE: f32 = 80.0;
|
||||||
const PARTICLE_RAND_VEL_DIST: f32 = 0.2828427; // dist where x and y = 0.2
|
const PARTICLE_RAND_VEL_DIST: f32 = 0.2828427; // dist where x and y = 0.2
|
||||||
const PARTICLE_RAND_ROT_RANGE: f32 = 0.5;
|
const PARTICLE_RAND_ROT_RANGE: f32 = 5.0;
|
||||||
const JOINING_OPACITY_RATE: f32 = 0.00013;
|
const JOINING_OPACITY_RATE: f32 = 0.13;
|
||||||
const JOINING_FAR_DIST: f32 = 700.0;
|
const JOINING_FAR_DIST: f32 = 700.0;
|
||||||
const JOINING_NEAR_DIST: f32 = 150.0;
|
const JOINING_NEAR_DIST: f32 = 150.0;
|
||||||
const DOUBLE_CLICK_TIME: f32 = 0.350;
|
const DOUBLE_CLICK_TIME: f32 = 0.350;
|
||||||
|
@ -747,7 +747,7 @@ impl RotatingParticleSystem {
|
||||||
self.particle_system.update(dt);
|
self.particle_system.update(dt);
|
||||||
self.particle_system.host_circle = saved_cir;
|
self.particle_system.host_circle = saved_cir;
|
||||||
}
|
}
|
||||||
self.r += self.velr * dt as f32;
|
self.r += self.velr * dt as f32 * 10.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&mut self, window: &mut Window, transform: Transform) {
|
fn draw(&mut self, window: &mut Window, transform: Transform) {
|
||||||
|
@ -767,12 +767,10 @@ impl RotatingParticleSystem {
|
||||||
.draw_rect_transform(
|
.draw_rect_transform(
|
||||||
moved_rect,
|
moved_rect,
|
||||||
solid_color,
|
solid_color,
|
||||||
transform
|
transform * Transform::rotate(self.r * 1.3),
|
||||||
* Transform::translate(-moved_rect.x / 2.0, -moved_rect.y / 2.0)
|
|
||||||
* Transform::rotate(self.r * 1.3),
|
|
||||||
Vector {
|
Vector {
|
||||||
x: moved_rect.x + moved_rect.w / 2.0,
|
x: moved_rect.x,
|
||||||
y: moved_rect.y + moved_rect.h / 2.0,
|
y: moved_rect.y,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.ok();
|
.ok();
|
||||||
|
@ -1103,7 +1101,7 @@ impl Fish {
|
||||||
FishState::Swim => {
|
FishState::Swim => {
|
||||||
self.swim_time = rand::thread_rng().gen_range(1.4, 2.3);
|
self.swim_time = rand::thread_rng().gen_range(1.4, 2.3);
|
||||||
self.swim_timer = self.swim_time;
|
self.swim_timer = self.swim_time;
|
||||||
self.r = rand::thread_rng().gen_range(0.0, 360.0);
|
self.r = rand::thread_rng().gen_range(0.0, std::f32::consts::PI * 2.0);
|
||||||
self.anim_timer = rand::thread_rng().gen_range(0.6, 1.0);
|
self.anim_timer = rand::thread_rng().gen_range(0.6, 1.0);
|
||||||
self.anim_time = self.anim_timer;
|
self.anim_time = self.anim_timer;
|
||||||
self.swim_v = (self.anim_timer / 8.0) as f32;
|
self.swim_v = (self.anim_timer / 8.0) as f32;
|
||||||
|
@ -1129,7 +1127,7 @@ impl Fish {
|
||||||
self.anim_timer = self.anim_time;
|
self.anim_timer = self.anim_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pos += Transform::rotate(self.r) * Vector::new(self.swim_v, 0.0) * dt as f32;
|
self.pos -= Transform::rotate(self.r) * Vector::new(self.swim_v, 0.0) * dt as f32 * 1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&mut self, i_fish: &str, window: &mut Window, transform: Transform) {
|
fn draw(&mut self, i_fish: &str, window: &mut Window, transform: Transform) {
|
||||||
|
@ -1138,10 +1136,9 @@ impl Fish {
|
||||||
.expect("\"fish\" Image should be loaded");
|
.expect("\"fish\" Image should be loaded");
|
||||||
let anim_angle = ((self.anim_timer / self.anim_time) * std::f32::consts::PI * 2.0).sin();
|
let anim_angle = ((self.anim_timer / self.anim_time) * std::f32::consts::PI * 2.0).sin();
|
||||||
let mut body_rect = self.body_rect;
|
let mut body_rect = self.body_rect;
|
||||||
body_rect.x = self.pos.x - body_rect.w / 2.0;
|
body_rect.x = self.pos.x - self.body_rect.w / 2.0;
|
||||||
body_rect.y = self.pos.y - body_rect.h / 2.0;
|
body_rect.y = self.pos.y - self.body_rect.h / 2.0;
|
||||||
let body_tr =
|
let body_tr = Transform::rotate(anim_angle as f32 + self.r);
|
||||||
Transform::rotate(anim_angle as f32 * 30.0) * Transform::rotate(self.r + 180.0);
|
|
||||||
fish_img
|
fish_img
|
||||||
.draw_sub_transform(
|
.draw_sub_transform(
|
||||||
self.body_rect,
|
self.body_rect,
|
||||||
|
@ -1149,22 +1146,21 @@ impl Fish {
|
||||||
self.color,
|
self.color,
|
||||||
transform * body_tr,
|
transform * body_tr,
|
||||||
Vector {
|
Vector {
|
||||||
x: self.body_rect.x + self.body_rect.w / 2.0,
|
x: self.pos.x,
|
||||||
y: self.body_rect.y + self.body_rect.h / 2.0,
|
y: self.pos.y,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.ok();
|
.ok();
|
||||||
let mut tail_rect = self.tail_rect;
|
let mut tail_rect = self.tail_rect;
|
||||||
tail_rect.x = self.pos.x - tail_rect.w / 2.0;
|
tail_rect.x = self.pos.x + body_rect.w / 2.0;
|
||||||
tail_rect.y = self.pos.y - tail_rect.h / 2.0;
|
tail_rect.y = self.pos.y - body_rect.h / 2.0;
|
||||||
let anim_angle = ((self.anim_timer / self.anim_time) * std::f32::consts::PI * 2.0
|
let anim_angle = ((self.anim_timer / self.anim_time) * std::f32::consts::PI * 2.0
|
||||||
- std::f32::consts::PI / 3.0)
|
- std::f32::consts::PI / 3.0)
|
||||||
.sin();
|
.sin();
|
||||||
let tail_tr = body_tr
|
let tail_tr = body_tr
|
||||||
* Transform::translate(body_rect.x / 1.5, 0.0)
|
* Transform::translate(-body_rect.w / 2.0, 0.0)
|
||||||
* Transform::translate(-tail_rect.x / 2.0, 0.0)
|
* Transform::rotate(-anim_angle as f32)
|
||||||
* Transform::rotate(-anim_angle as f32 * 45.0)
|
* Transform::translate(body_rect.w / 2.0, 0.0);
|
||||||
* Transform::translate(tail_rect.x / 2.0, 0.0);
|
|
||||||
fish_img
|
fish_img
|
||||||
.draw_sub_transform(
|
.draw_sub_transform(
|
||||||
self.tail_rect,
|
self.tail_rect,
|
||||||
|
@ -1172,8 +1168,8 @@ impl Fish {
|
||||||
self.color,
|
self.color,
|
||||||
transform * tail_tr,
|
transform * tail_tr,
|
||||||
Vector {
|
Vector {
|
||||||
x: self.tail_rect.x + self.tail_rect.w / 2.0,
|
x: self.pos.x,
|
||||||
y: self.tail_rect.y + self.tail_rect.h / 2.0,
|
y: self.pos.y,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.ok();
|
.ok();
|
||||||
|
|
Loading…
Reference in a new issue