mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
fmt
Former-commit-id: b43b7192f7a2dd71da26182ca0c74449867381f3
This commit is contained in:
parent
3b44bda43c
commit
54cc9e137a
@ -4,7 +4,10 @@ pub mod error;
|
|||||||
pub mod input;
|
pub mod input;
|
||||||
|
|
||||||
// Reexports
|
// Reexports
|
||||||
pub use crate::{error::Error, input::{Input, InputEvent}};
|
pub use crate::{
|
||||||
|
error::Error,
|
||||||
|
input::{Input, InputEvent},
|
||||||
|
};
|
||||||
pub use specs::join::Join;
|
pub use specs::join::Join;
|
||||||
pub use specs::Entity as EcsEntity;
|
pub use specs::Entity as EcsEntity;
|
||||||
|
|
||||||
@ -196,7 +199,11 @@ impl Client {
|
|||||||
// Remove chunks that are too far from the player
|
// Remove chunks that are too far from the player
|
||||||
let mut chunks_to_remove = Vec::new();
|
let mut chunks_to_remove = Vec::new();
|
||||||
self.state.terrain().iter().for_each(|(key, _)| {
|
self.state.terrain().iter().for_each(|(key, _)| {
|
||||||
if (Vec2::from(chunk_pos) - Vec2::from(key)).map(|e: i32| e.abs()).reduce_max() > 6 {
|
if (Vec2::from(chunk_pos) - Vec2::from(key))
|
||||||
|
.map(|e: i32| e.abs())
|
||||||
|
.reduce_max()
|
||||||
|
> 6
|
||||||
|
{
|
||||||
chunks_to_remove.push(key);
|
chunks_to_remove.push(key);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -203,11 +203,7 @@ impl<S: PostMsg, R: PostMsg> PostBox<S, R> {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Assemble into packet
|
// Assemble into packet
|
||||||
let mut packet_bytes = msg_bytes
|
let mut packet_bytes = msg_bytes.len().to_le_bytes().as_ref().to_vec();
|
||||||
.len()
|
|
||||||
.to_le_bytes()
|
|
||||||
.as_ref()
|
|
||||||
.to_vec();
|
|
||||||
packet_bytes.push(msg_bytes.iter().fold(0, |a, x| a ^ *x));
|
packet_bytes.push(msg_bytes.iter().fold(0, |a, x| a ^ *x));
|
||||||
packet_bytes.append(&mut msg_bytes);
|
packet_bytes.append(&mut msg_bytes);
|
||||||
|
|
||||||
@ -270,25 +266,32 @@ impl<S: PostMsg, R: PostMsg> PostBox<S, R> {
|
|||||||
for _ in 0..100 {
|
for _ in 0..100 {
|
||||||
match incoming_buf.get(0..9) {
|
match incoming_buf.get(0..9) {
|
||||||
Some(len_bytes) => {
|
Some(len_bytes) => {
|
||||||
let len = usize::from_le_bytes(<[u8; 8]>::try_from(&len_bytes[0..8]).unwrap()); // Can't fail
|
let len = usize::from_le_bytes(
|
||||||
|
<[u8; 8]>::try_from(&len_bytes[0..8]).unwrap(),
|
||||||
|
); // Can't fail
|
||||||
|
|
||||||
if len > MAX_MSG_SIZE {
|
if len > MAX_MSG_SIZE {
|
||||||
recv_tx.send(Err(Error::InvalidMessage)).unwrap();
|
recv_tx.send(Err(Error::InvalidMessage)).unwrap();
|
||||||
break 'work;
|
break 'work;
|
||||||
} else if incoming_buf.len() >= len + 9 {
|
} else if incoming_buf.len() >= len + 9 {
|
||||||
let checksum_found = incoming_buf[9..len + 9].iter().fold(0, |a, x| a ^ *x);
|
let checksum_found =
|
||||||
|
incoming_buf[9..len + 9].iter().fold(0, |a, x| a ^ *x);
|
||||||
let checksum_expected = len_bytes[8];
|
let checksum_expected = len_bytes[8];
|
||||||
|
|
||||||
assert_eq!(checksum_found, checksum_expected, "Message checksum failed!");
|
assert_eq!(
|
||||||
|
checksum_found, checksum_expected,
|
||||||
|
"Message checksum failed!"
|
||||||
|
);
|
||||||
|
|
||||||
let msg_bytes = lz4_compress::decompress(&incoming_buf[9..len + 9]).unwrap();
|
let msg_bytes =
|
||||||
|
lz4_compress::decompress(&incoming_buf[9..len + 9]).unwrap();
|
||||||
|
|
||||||
match bincode::deserialize(&msg_bytes) {
|
match bincode::deserialize(&msg_bytes) {
|
||||||
Ok(msg) => recv_tx.send(Ok(msg)).unwrap(),
|
Ok(msg) => recv_tx.send(Ok(msg)).unwrap(),
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
println!("BINCODE ERROR: {:?}", err);
|
println!("BINCODE ERROR: {:?}", err);
|
||||||
recv_tx.send(Err(err.into())).unwrap()
|
recv_tx.send(Err(err.into())).unwrap()
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
incoming_buf = incoming_buf.split_off(len + 9);
|
incoming_buf = incoming_buf.split_off(len + 9);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Library
|
// Library
|
||||||
use specs::{Entities, Join, Read, ReadStorage, ReadExpect, System, WriteStorage};
|
use specs::{Entities, Join, Read, ReadExpect, ReadStorage, System, WriteStorage};
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
// Crate
|
// Crate
|
||||||
@ -8,9 +8,9 @@ use crate::{
|
|||||||
phys::{Dir, Pos, Vel},
|
phys::{Dir, Pos, Vel},
|
||||||
Animation, AnimationHistory, Control,
|
Animation, AnimationHistory, Control,
|
||||||
},
|
},
|
||||||
|
state::DeltaTime,
|
||||||
terrain::TerrainMap,
|
terrain::TerrainMap,
|
||||||
vol::{ReadVol, Vox},
|
vol::{ReadVol, Vox},
|
||||||
state::DeltaTime,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Basic ECS AI agent system
|
// Basic ECS AI agent system
|
||||||
@ -28,14 +28,18 @@ impl<'a> System<'a> for Sys {
|
|||||||
ReadStorage<'a, Control>,
|
ReadStorage<'a, Control>,
|
||||||
);
|
);
|
||||||
|
|
||||||
fn run(&mut self, (terrain, dt, entities, pos, mut vels, mut dirs, mut anims, controls): Self::SystemData) {
|
fn run(
|
||||||
|
&mut self,
|
||||||
|
(terrain, dt, entities, pos, mut vels, mut dirs, mut anims, controls): Self::SystemData,
|
||||||
|
) {
|
||||||
for (entity, pos, mut vel, mut dir, control) in
|
for (entity, pos, mut vel, mut dir, control) in
|
||||||
(&entities, &pos, &mut vels, &mut dirs, &controls).join()
|
(&entities, &pos, &mut vels, &mut dirs, &controls).join()
|
||||||
{
|
{
|
||||||
let on_ground = terrain
|
let on_ground = terrain
|
||||||
.get((pos.0 - Vec3::unit_z() * 0.1).map(|e| e.floor() as i32))
|
.get((pos.0 - Vec3::unit_z() * 0.1).map(|e| e.floor() as i32))
|
||||||
.map(|vox| !vox.is_empty())
|
.map(|vox| !vox.is_empty())
|
||||||
.unwrap_or(false) && vel.0.z <= 0.0;
|
.unwrap_or(false)
|
||||||
|
&& vel.0.z <= 0.0;
|
||||||
|
|
||||||
if on_ground {
|
if on_ground {
|
||||||
// TODO: Don't hard-code this
|
// TODO: Don't hard-code this
|
||||||
@ -64,8 +68,8 @@ impl<'a> System<'a> for Sys {
|
|||||||
|
|
||||||
let last_history = anims.get_mut(entity).cloned();
|
let last_history = anims.get_mut(entity).cloned();
|
||||||
|
|
||||||
let time = if let Some((true, time)) = last_history
|
let time = if let Some((true, time)) =
|
||||||
.map(|last| (last.current == animation, last.time))
|
last_history.map(|last| (last.current == animation, last.time))
|
||||||
{
|
{
|
||||||
time + dt.0 as f64
|
time + dt.0 as f64
|
||||||
} else {
|
} else {
|
||||||
|
@ -8,19 +8,10 @@ pub mod input;
|
|||||||
// Reexports
|
// Reexports
|
||||||
pub use crate::{error::Error, input::Input};
|
pub use crate::{error::Error, input::Input};
|
||||||
|
|
||||||
use std::{
|
use crate::{
|
||||||
collections::HashSet,
|
client::{Client, Clients},
|
||||||
net::SocketAddr,
|
cmd::CHAT_COMMANDS,
|
||||||
sync::mpsc,
|
|
||||||
time::Duration,
|
|
||||||
i32,
|
|
||||||
};
|
};
|
||||||
use specs::{
|
|
||||||
join::Join, saveload::MarkedBuilder, world::EntityBuilder as EcsEntityBuilder, Builder,
|
|
||||||
Entity as EcsEntity,
|
|
||||||
};
|
|
||||||
use threadpool::ThreadPool;
|
|
||||||
use vek::*;
|
|
||||||
use common::{
|
use common::{
|
||||||
comp,
|
comp,
|
||||||
comp::character::Animation,
|
comp::character::Animation,
|
||||||
@ -29,11 +20,14 @@ use common::{
|
|||||||
state::{State, Uid},
|
state::{State, Uid},
|
||||||
terrain::TerrainChunk,
|
terrain::TerrainChunk,
|
||||||
};
|
};
|
||||||
use world::World;
|
use specs::{
|
||||||
use crate::{
|
join::Join, saveload::MarkedBuilder, world::EntityBuilder as EcsEntityBuilder, Builder,
|
||||||
client::{Client, Clients},
|
Entity as EcsEntity,
|
||||||
cmd::CHAT_COMMANDS,
|
|
||||||
};
|
};
|
||||||
|
use std::{collections::HashSet, i32, net::SocketAddr, sync::mpsc, time::Duration};
|
||||||
|
use threadpool::ThreadPool;
|
||||||
|
use vek::*;
|
||||||
|
use world::World;
|
||||||
|
|
||||||
const CLIENT_TIMEOUT: f64 = 20.0; // Seconds
|
const CLIENT_TIMEOUT: f64 = 20.0; // Seconds
|
||||||
|
|
||||||
@ -204,7 +198,9 @@ impl Server {
|
|||||||
.join()
|
.join()
|
||||||
{
|
{
|
||||||
let chunk_pos = self.state.terrain().pos_key(pos.0.map(|e| e as i32));
|
let chunk_pos = self.state.terrain().pos_key(pos.0.map(|e| e as i32));
|
||||||
let dist = (Vec2::from(chunk_pos) - Vec2::from(key)).map(|e: i32| e.abs()).reduce_max();
|
let dist = (Vec2::from(chunk_pos) - Vec2::from(key))
|
||||||
|
.map(|e: i32| e.abs())
|
||||||
|
.reduce_max();
|
||||||
|
|
||||||
if dist < 5 {
|
if dist < 5 {
|
||||||
self.clients.notify(
|
self.clients.notify(
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
// Standard
|
// Standard
|
||||||
use std::{
|
use std::{f32::consts::PI, ops::Mul};
|
||||||
f32::consts::PI,
|
|
||||||
ops::Mul,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Library
|
// Library
|
||||||
use vek::*;
|
use vek::*;
|
||||||
@ -16,7 +13,11 @@ impl Animation for IdleAnimation {
|
|||||||
type Skeleton = CharacterSkeleton;
|
type Skeleton = CharacterSkeleton;
|
||||||
type Dependency = f64;
|
type Dependency = f64;
|
||||||
|
|
||||||
fn update_skeleton(skeleton: &Self::Skeleton, global_time: f64, anim_time: f64) -> Self::Skeleton {
|
fn update_skeleton(
|
||||||
|
skeleton: &Self::Skeleton,
|
||||||
|
global_time: f64,
|
||||||
|
anim_time: f64,
|
||||||
|
) -> Self::Skeleton {
|
||||||
let mut next = (*skeleton).clone();
|
let mut next = (*skeleton).clone();
|
||||||
|
|
||||||
let wave = (anim_time as f32 * 12.0).sin();
|
let wave = (anim_time as f32 * 12.0).sin();
|
||||||
@ -48,16 +49,16 @@ impl Animation for IdleAnimation {
|
|||||||
next.shorts.scale = Vec3::one();
|
next.shorts.scale = Vec3::one();
|
||||||
|
|
||||||
next.l_hand.offset = Vec3::new(
|
next.l_hand.offset = Vec3::new(
|
||||||
-7.5, -2.0 + waveultracos_slow * 0.3,
|
-7.5,
|
||||||
|
-2.0 + waveultracos_slow * 0.3,
|
||||||
12.0 + waveultra_slow * 1.1,
|
12.0 + waveultra_slow * 1.1,
|
||||||
);
|
);
|
||||||
next.l_hand.ori = Quaternion::rotation_x(0.0 + waveultra_slow * 0.06);
|
next.l_hand.ori = Quaternion::rotation_x(0.0 + waveultra_slow * 0.06);
|
||||||
next.l_hand.scale = Vec3::one();
|
next.l_hand.scale = Vec3::one();
|
||||||
|
|
||||||
next.r_hand.offset = Vec3::new(
|
next.r_hand.offset = Vec3::new(
|
||||||
7.5, -2.0 + waveultracos_slow * 0.3,
|
7.5,
|
||||||
|
-2.0 + waveultracos_slow * 0.3,
|
||||||
12.0 + waveultra_slow * 1.1,
|
12.0 + waveultra_slow * 1.1,
|
||||||
);
|
);
|
||||||
next.r_hand.ori = Quaternion::rotation_x(0.0 + waveultra_slow * 0.06);
|
next.r_hand.ori = Quaternion::rotation_x(0.0 + waveultra_slow * 0.06);
|
||||||
|
@ -14,7 +14,11 @@ impl Animation for JumpAnimation {
|
|||||||
type Skeleton = CharacterSkeleton;
|
type Skeleton = CharacterSkeleton;
|
||||||
type Dependency = f64;
|
type Dependency = f64;
|
||||||
|
|
||||||
fn update_skeleton(skeleton: &Self::Skeleton, global_time: f64, anim_time: f64) -> Self::Skeleton {
|
fn update_skeleton(
|
||||||
|
skeleton: &Self::Skeleton,
|
||||||
|
global_time: f64,
|
||||||
|
anim_time: f64,
|
||||||
|
) -> Self::Skeleton {
|
||||||
let mut next = (*skeleton).clone();
|
let mut next = (*skeleton).clone();
|
||||||
let wave = (anim_time as f32 * 14.0).sin();
|
let wave = (anim_time as f32 * 14.0).sin();
|
||||||
let arcwave = (1.0f32.ln_1p() - 1.0).abs();
|
let arcwave = (1.0f32.ln_1p() - 1.0).abs();
|
||||||
@ -22,7 +26,7 @@ impl Animation for JumpAnimation {
|
|||||||
let fuzzwave = (anim_time as f32 * 12.0).sin();
|
let fuzzwave = (anim_time as f32 * 12.0).sin();
|
||||||
let wavecos = (anim_time as f32 * 14.0).cos();
|
let wavecos = (anim_time as f32 * 14.0).cos();
|
||||||
let wave_slow = (anim_time as f32 * 5.0 + PI).min(PI / 2.0).sin();
|
let wave_slow = (anim_time as f32 * 5.0 + PI).min(PI / 2.0).sin();
|
||||||
let wave_slowtest = (anim_time as f32).min(PI/2.0).sin();
|
let wave_slowtest = (anim_time as f32).min(PI / 2.0).sin();
|
||||||
let wavecos_slow = (anim_time as f32 * 8.0 + PI).cos();
|
let wavecos_slow = (anim_time as f32 * 8.0 + PI).cos();
|
||||||
let wave_dip = (wave_slow.abs() - 0.5).abs();
|
let wave_dip = (wave_slow.abs() - 0.5).abs();
|
||||||
let mult = wave_slow / (wave_slow.abs());
|
let mult = wave_slow / (wave_slow.abs());
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
pub mod idle;
|
pub mod idle;
|
||||||
pub mod run;
|
|
||||||
pub mod jump;
|
pub mod jump;
|
||||||
|
pub mod run;
|
||||||
|
|
||||||
// Reexports
|
// Reexports
|
||||||
pub use self::idle::IdleAnimation;
|
pub use self::idle::IdleAnimation;
|
||||||
pub use self::run::RunAnimation;
|
|
||||||
pub use self::jump::JumpAnimation;
|
pub use self::jump::JumpAnimation;
|
||||||
|
pub use self::run::RunAnimation;
|
||||||
// Crate
|
// Crate
|
||||||
use crate::render::FigureBoneData;
|
use crate::render::FigureBoneData;
|
||||||
|
|
||||||
|
@ -13,7 +13,11 @@ impl Animation for RunAnimation {
|
|||||||
type Skeleton = CharacterSkeleton;
|
type Skeleton = CharacterSkeleton;
|
||||||
type Dependency = (f32, f64);
|
type Dependency = (f32, f64);
|
||||||
|
|
||||||
fn update_skeleton(skeleton: &Self::Skeleton, (velocity, global_time): Self::Dependency, anim_time: f64) -> Self::Skeleton {
|
fn update_skeleton(
|
||||||
|
skeleton: &Self::Skeleton,
|
||||||
|
(velocity, global_time): Self::Dependency,
|
||||||
|
anim_time: f64,
|
||||||
|
) -> Self::Skeleton {
|
||||||
let mut next = (*skeleton).clone();
|
let mut next = (*skeleton).clone();
|
||||||
|
|
||||||
let wave = (anim_time as f32 * 14.0).sin();
|
let wave = (anim_time as f32 * 14.0).sin();
|
||||||
@ -61,7 +65,7 @@ impl Animation for RunAnimation {
|
|||||||
next.weapon.scale = Vec3::one();
|
next.weapon.scale = Vec3::one();
|
||||||
|
|
||||||
next.torso.offset = Vec3::new(-0.5, -0.2, 0.2);
|
next.torso.offset = Vec3::new(-0.5, -0.2, 0.2);
|
||||||
next.torso.ori = Quaternion::rotation_x( - velocity * 0.05 - wavecos * 0.1);
|
next.torso.ori = Quaternion::rotation_x(-velocity * 0.05 - wavecos * 0.1);
|
||||||
next.torso.scale = Vec3::one() / 11.0;
|
next.torso.scale = Vec3::one() / 11.0;
|
||||||
|
|
||||||
next.l_shoulder.offset = Vec3::new(3.0, 6.0, 18.0);
|
next.l_shoulder.offset = Vec3::new(3.0, 6.0, 18.0);
|
||||||
|
@ -50,5 +50,9 @@ pub trait Animation {
|
|||||||
type Dependency;
|
type Dependency;
|
||||||
|
|
||||||
/// Returns a new skeleton that is generated by the animation
|
/// Returns a new skeleton that is generated by the animation
|
||||||
fn update_skeleton(skeleton: &Self::Skeleton, dependency: Self::Dependency, anim_time: f64) -> Self::Skeleton;
|
fn update_skeleton(
|
||||||
|
skeleton: &Self::Skeleton,
|
||||||
|
dependency: Self::Dependency,
|
||||||
|
anim_time: f64,
|
||||||
|
) -> Self::Skeleton;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
use client::{error::Error as ClientError, Client};
|
use client::{error::Error as ClientError, Client};
|
||||||
use common::comp;
|
use common::comp;
|
||||||
use std::{
|
use std::{
|
||||||
|
net::ToSocketAddrs,
|
||||||
sync::mpsc::{channel, Receiver, TryRecvError},
|
sync::mpsc::{channel, Receiver, TryRecvError},
|
||||||
thread::{self, JoinHandle},
|
thread::{self, JoinHandle},
|
||||||
net::ToSocketAddrs,
|
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -23,7 +23,11 @@ pub struct ClientInit {
|
|||||||
rx: Receiver<Result<Client, Error>>,
|
rx: Receiver<Result<Client, Error>>,
|
||||||
}
|
}
|
||||||
impl ClientInit {
|
impl ClientInit {
|
||||||
pub fn new(connection_args: (String, u16, bool), client_args: (comp::Player, u64), wait: bool) -> Self {
|
pub fn new(
|
||||||
|
connection_args: (String, u16, bool),
|
||||||
|
client_args: (comp::Player, u64),
|
||||||
|
wait: bool,
|
||||||
|
) -> Self {
|
||||||
let (server_address, default_port, prefer_ipv6) = connection_args;
|
let (server_address, default_port, prefer_ipv6) = connection_args;
|
||||||
let (player, view_distance) = client_args;
|
let (player, view_distance) = client_args;
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
use std::net::SocketAddr;
|
use super::{client_init::ClientInit, DEFAULT_PORT};
|
||||||
use log::warn;
|
|
||||||
use common::comp;
|
|
||||||
use crate::{
|
use crate::{
|
||||||
menu::char_selection::CharSelectionState, singleplayer::Singleplayer, Direction, GlobalState,
|
menu::char_selection::CharSelectionState, singleplayer::Singleplayer, Direction, GlobalState,
|
||||||
PlayState, PlayStateResult,
|
PlayState, PlayStateResult,
|
||||||
};
|
};
|
||||||
use super::{client_init::ClientInit, DEFAULT_PORT};
|
use common::comp;
|
||||||
|
use log::warn;
|
||||||
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
pub struct StartSingleplayerState {
|
pub struct StartSingleplayerState {
|
||||||
singleplayer: Singleplayer,
|
singleplayer: Singleplayer,
|
||||||
@ -17,10 +17,7 @@ impl StartSingleplayerState {
|
|||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let (singleplayer, sock) = Singleplayer::new();
|
let (singleplayer, sock) = Singleplayer::new();
|
||||||
|
|
||||||
Self {
|
Self { singleplayer, sock }
|
||||||
singleplayer,
|
|
||||||
sock,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +42,7 @@ impl PlayState for StartSingleplayerState {
|
|||||||
Some(Err(err)) => {
|
Some(Err(err)) => {
|
||||||
warn!("Failed to start singleplayer server: {:?}", err);
|
warn!("Failed to start singleplayer server: {:?}", err);
|
||||||
return PlayStateResult::Pop;
|
return PlayStateResult::Pop;
|
||||||
},
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -12,7 +12,7 @@ use gfx::{
|
|||||||
|
|
||||||
// Local
|
// Local
|
||||||
use super::{
|
use super::{
|
||||||
super::{Mesh, Pipeline, WinColorFmt, WinDepthFmt, Tri},
|
super::{Mesh, Pipeline, Tri, WinColorFmt, WinDepthFmt},
|
||||||
Globals,
|
Globals,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use super::super::{Pipeline, Quad, WinColorFmt, WinDepthFmt, Tri};
|
use super::super::{Pipeline, Quad, Tri, WinColorFmt, WinDepthFmt};
|
||||||
use gfx::{
|
use gfx::{
|
||||||
self,
|
self,
|
||||||
// Macros
|
// Macros
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
anim::{
|
anim::{
|
||||||
character::{CharacterSkeleton, IdleAnimation, RunAnimation, JumpAnimation},
|
character::{CharacterSkeleton, IdleAnimation, JumpAnimation, RunAnimation},
|
||||||
Animation, Skeleton,
|
Animation, Skeleton,
|
||||||
},
|
},
|
||||||
mesh::Meshable,
|
mesh::Meshable,
|
||||||
@ -207,15 +207,21 @@ impl FigureCache {
|
|||||||
.or_insert_with(|| FigureState::new(renderer, CharacterSkeleton::new()));
|
.or_insert_with(|| FigureState::new(renderer, CharacterSkeleton::new()));
|
||||||
|
|
||||||
let target_skeleton = match animation_history.current {
|
let target_skeleton = match animation_history.current {
|
||||||
comp::character::Animation::Idle => {
|
comp::character::Animation::Idle => IdleAnimation::update_skeleton(
|
||||||
IdleAnimation::update_skeleton(&mut state.skeleton, time, animation_history.time)
|
&mut state.skeleton,
|
||||||
},
|
time,
|
||||||
comp::character::Animation::Run => {
|
animation_history.time,
|
||||||
RunAnimation::update_skeleton(&mut state.skeleton, (vel.0.magnitude(), time), animation_history.time)
|
),
|
||||||
},
|
comp::character::Animation::Run => RunAnimation::update_skeleton(
|
||||||
comp::character::Animation::Jump => {
|
&mut state.skeleton,
|
||||||
JumpAnimation::update_skeleton(&mut state.skeleton, time, animation_history.time)
|
(vel.0.magnitude(), time),
|
||||||
},
|
animation_history.time,
|
||||||
|
),
|
||||||
|
comp::character::Animation::Jump => JumpAnimation::update_skeleton(
|
||||||
|
&mut state.skeleton,
|
||||||
|
time,
|
||||||
|
animation_history.time,
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
state.skeleton.interpolate(&target_skeleton);
|
state.skeleton.interpolate(&target_skeleton);
|
||||||
@ -266,7 +272,7 @@ impl<S: Skeleton> FigureState<S> {
|
|||||||
fn update(&mut self, renderer: &mut Renderer, pos: Vec3<f32>, dir: Vec3<f32>) {
|
fn update(&mut self, renderer: &mut Renderer, pos: Vec3<f32>, dir: Vec3<f32>) {
|
||||||
let mat = Mat4::<f32>::identity()
|
let mat = Mat4::<f32>::identity()
|
||||||
* Mat4::translation_3d(pos)
|
* Mat4::translation_3d(pos)
|
||||||
* Mat4::rotation_z(-dir.x.atan2(dir.y));// + f32::consts::PI / 2.0);
|
* Mat4::rotation_z(-dir.x.atan2(dir.y)); // + f32::consts::PI / 2.0);
|
||||||
|
|
||||||
let locals = FigureLocals::new(mat);
|
let locals = FigureLocals::new(mat);
|
||||||
renderer.update_consts(&mut self.locals, &[locals]).unwrap();
|
renderer.update_consts(&mut self.locals, &[locals]).unwrap();
|
||||||
|
@ -1,17 +1,3 @@
|
|||||||
use std::{
|
|
||||||
cell::RefCell,
|
|
||||||
rc::Rc,
|
|
||||||
time::Duration,
|
|
||||||
mem,
|
|
||||||
};
|
|
||||||
use vek::*;
|
|
||||||
use common::clock::Clock;
|
|
||||||
use client::{
|
|
||||||
self,
|
|
||||||
Client,
|
|
||||||
Input,
|
|
||||||
InputEvent,
|
|
||||||
};
|
|
||||||
use crate::{
|
use crate::{
|
||||||
hud::{Event as HudEvent, Hud},
|
hud::{Event as HudEvent, Hud},
|
||||||
key_state::KeyState,
|
key_state::KeyState,
|
||||||
@ -21,6 +7,10 @@ use crate::{
|
|||||||
window::{Event, Key, Window},
|
window::{Event, Key, Window},
|
||||||
Direction, Error, GlobalState, PlayState, PlayStateResult,
|
Direction, Error, GlobalState, PlayState, PlayStateResult,
|
||||||
};
|
};
|
||||||
|
use client::{self, Client, Input, InputEvent};
|
||||||
|
use common::clock::Clock;
|
||||||
|
use std::{cell::RefCell, mem, rc::Rc, time::Duration};
|
||||||
|
use vek::*;
|
||||||
|
|
||||||
const FPS: u64 = 60;
|
const FPS: u64 = 60;
|
||||||
|
|
||||||
@ -72,15 +62,14 @@ impl SessionState {
|
|||||||
let mut input_events = Vec::new();
|
let mut input_events = Vec::new();
|
||||||
mem::swap(&mut self.input_events, &mut input_events);
|
mem::swap(&mut self.input_events, &mut input_events);
|
||||||
|
|
||||||
for event in self
|
for event in self.client.borrow_mut().tick(
|
||||||
.client
|
Input {
|
||||||
.borrow_mut()
|
|
||||||
.tick(Input {
|
|
||||||
move_dir,
|
move_dir,
|
||||||
jumping: self.key_state.jump,
|
jumping: self.key_state.jump,
|
||||||
events: input_events,
|
events: input_events,
|
||||||
}, dt)?
|
},
|
||||||
{
|
dt,
|
||||||
|
)? {
|
||||||
match event {
|
match event {
|
||||||
client::Event::Chat(msg) => {
|
client::Event::Chat(msg) => {
|
||||||
self.hud.new_message(msg);
|
self.hud.new_message(msg);
|
||||||
@ -155,7 +144,7 @@ impl PlayState for SessionState {
|
|||||||
Event::KeyDown(Key::Jump) => {
|
Event::KeyDown(Key::Jump) => {
|
||||||
self.input_events.push(InputEvent::Jump);
|
self.input_events.push(InputEvent::Jump);
|
||||||
self.key_state.jump = true;
|
self.key_state.jump = true;
|
||||||
},
|
}
|
||||||
// Movement Key Released
|
// Movement Key Released
|
||||||
Event::KeyUp(Key::MoveForward) => self.key_state.up = false,
|
Event::KeyUp(Key::MoveForward) => self.key_state.up = false,
|
||||||
Event::KeyUp(Key::MoveBack) => self.key_state.down = false,
|
Event::KeyUp(Key::MoveBack) => self.key_state.down = false,
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
use std::{
|
use common::clock::Clock;
|
||||||
sync::mpsc::{channel, Receiver, Sender, TryRecvError},
|
|
||||||
time::Duration,
|
|
||||||
thread::{self, JoinHandle},
|
|
||||||
net::SocketAddr,
|
|
||||||
};
|
|
||||||
use log::info;
|
use log::info;
|
||||||
use portpicker::pick_unused_port;
|
use portpicker::pick_unused_port;
|
||||||
use common::clock::Clock;
|
|
||||||
use server::{Event, Input, Server};
|
use server::{Event, Input, Server};
|
||||||
|
use std::{
|
||||||
|
net::SocketAddr,
|
||||||
|
sync::mpsc::{channel, Receiver, Sender, TryRecvError},
|
||||||
|
thread::{self, JoinHandle},
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
const TPS: u64 = 30;
|
const TPS: u64 = 30;
|
||||||
|
|
||||||
@ -26,18 +26,23 @@ impl Singleplayer {
|
|||||||
pub fn new() -> (Self, SocketAddr) {
|
pub fn new() -> (Self, SocketAddr) {
|
||||||
let (sender, reciever) = channel();
|
let (sender, reciever) = channel();
|
||||||
|
|
||||||
let sock = SocketAddr::from(([127,0,0,1], pick_unused_port()
|
let sock = SocketAddr::from((
|
||||||
.expect("Failed to find unused port")));
|
[127, 0, 0, 1],
|
||||||
|
pick_unused_port().expect("Failed to find unused port"),
|
||||||
|
));
|
||||||
|
|
||||||
let sock2 = sock.clone();
|
let sock2 = sock.clone();
|
||||||
let thread = thread::spawn(move || {
|
let thread = thread::spawn(move || {
|
||||||
run_server(sock2, reciever);
|
run_server(sock2, reciever);
|
||||||
});
|
});
|
||||||
|
|
||||||
(Singleplayer {
|
(
|
||||||
server_thread: thread,
|
Singleplayer {
|
||||||
sender,
|
server_thread: thread,
|
||||||
}, sock)
|
sender,
|
||||||
|
},
|
||||||
|
sock,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,12 +32,9 @@ impl World {
|
|||||||
let dirt = Block::new(3, Rgb::new(128, 90, 0));
|
let dirt = Block::new(3, Rgb::new(128, 90, 0));
|
||||||
let sand = Block::new(4, Rgb::new(180, 150, 50));
|
let sand = Block::new(4, Rgb::new(180, 150, 50));
|
||||||
|
|
||||||
let perlin_nz = Perlin::new()
|
let perlin_nz = Perlin::new().set_seed(1);
|
||||||
.set_seed(1);
|
let temp_nz = Perlin::new().set_seed(2);
|
||||||
let temp_nz = Perlin::new()
|
let chaos_nz = Perlin::new().set_seed(3);
|
||||||
.set_seed(2);
|
|
||||||
let chaos_nz = Perlin::new()
|
|
||||||
.set_seed(3);
|
|
||||||
|
|
||||||
for lpos in chunk.iter_positions() {
|
for lpos in chunk.iter_positions() {
|
||||||
let wpos = lpos + chunk_pos * chunk.get_size().map(|e| e as i32);
|
let wpos = lpos + chunk_pos * chunk.get_size().map(|e| e as i32);
|
||||||
@ -50,10 +47,16 @@ impl World {
|
|||||||
let small_ampl = 6.0;
|
let small_ampl = 6.0;
|
||||||
let offs = 32.0;
|
let offs = 32.0;
|
||||||
|
|
||||||
let chaos = chaos_nz.get(Vec2::from(wposf * chaos_freq).into_array()).max(0.0) + 0.5;
|
let chaos = chaos_nz
|
||||||
|
.get(Vec2::from(wposf * chaos_freq).into_array())
|
||||||
|
.max(0.0)
|
||||||
|
+ 0.5;
|
||||||
|
|
||||||
let height = perlin_nz.get(Vec2::from(wposf * freq).into_array()) * ampl * chaos
|
let height = perlin_nz.get(Vec2::from(wposf * freq).into_array()) * ampl * chaos
|
||||||
+ perlin_nz.get((wposf * small_freq).into_array()) * small_ampl * 2.0 * chaos.powf(2.0)
|
+ perlin_nz.get((wposf * small_freq).into_array())
|
||||||
|
* small_ampl
|
||||||
|
* 2.0
|
||||||
|
* chaos.powf(2.0)
|
||||||
+ offs;
|
+ offs;
|
||||||
let temp = (temp_nz.get(Vec2::from(wposf * (1.0 / 64.0)).into_array()) + 1.0) * 0.5;
|
let temp = (temp_nz.get(Vec2::from(wposf * (1.0 / 64.0)).into_array()) + 1.0) * 0.5;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user