defs.txt: implement "angularmomentum", "rotationy" commands
This commit is contained in:
parent
34f63d08a5
commit
8736397cbf
34
src/world.rs
34
src/world.rs
|
@ -335,6 +335,8 @@ struct ParserState {
|
||||||
pos: Vec3,
|
pos: Vec3,
|
||||||
model: String,
|
model: String,
|
||||||
model_scale: f32,
|
model_scale: f32,
|
||||||
|
rotation: Quat,
|
||||||
|
angular_momentum: Quat,
|
||||||
pronoun: String,
|
pronoun: String,
|
||||||
is_lifeform: bool,
|
is_lifeform: bool,
|
||||||
is_alive: bool,
|
is_alive: bool,
|
||||||
|
@ -353,12 +355,14 @@ impl Default for ParserState {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
class: DefClass::None,
|
class: DefClass::None,
|
||||||
name: "".to_string(),
|
name: "NONAME".to_string(),
|
||||||
chat: "".to_string(),
|
chat: "".to_string(),
|
||||||
|
|
||||||
pos: Vec3::new(0.0, 0.0, 0.0),
|
pos: Vec3::new(0.0, 0.0, 0.0),
|
||||||
model: "".to_string(),
|
model: "".to_string(),
|
||||||
model_scale: 1.0,
|
model_scale: 1.0,
|
||||||
|
rotation: Quat::IDENTITY,
|
||||||
|
angular_momentum: Quat::IDENTITY,
|
||||||
pronoun: "they/them".to_string(),
|
pronoun: "they/them".to_string(),
|
||||||
is_lifeform: false,
|
is_lifeform: false,
|
||||||
is_alive: false,
|
is_alive: false,
|
||||||
|
@ -413,7 +417,10 @@ impl ParserState {
|
||||||
self.reset_message();
|
self.reset_message();
|
||||||
}
|
}
|
||||||
fn spawn_actor(&mut self, commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
fn spawn_actor(&mut self, commands: &mut Commands, asset_server: &Res<AssetServer>) {
|
||||||
let component_actor = actor::Actor::default();
|
let component_actor = actor::Actor {
|
||||||
|
angular_momentum: self.angular_momentum,
|
||||||
|
..default()
|
||||||
|
};
|
||||||
let component_lifeform = actor::LifeForm::default();
|
let component_lifeform = actor::LifeForm::default();
|
||||||
let component_talker = actor::Talker {
|
let component_talker = actor::Talker {
|
||||||
conv_id: self.chat.clone(),
|
conv_id: self.chat.clone(),
|
||||||
|
@ -424,7 +431,7 @@ impl ParserState {
|
||||||
transform: Transform {
|
transform: Transform {
|
||||||
translation: self.pos,
|
translation: self.pos,
|
||||||
scale: Vec3::splat(self.model_scale),
|
scale: Vec3::splat(self.model_scale),
|
||||||
rotation: Quat::from_rotation_y(-PI / 3.),
|
rotation: self.rotation,
|
||||||
},
|
},
|
||||||
scene: asset_server.load(asset_name_to_path(self.model.as_str())),
|
scene: asset_server.load(asset_name_to_path(self.model.as_str())),
|
||||||
..default()
|
..default()
|
||||||
|
@ -494,7 +501,7 @@ pub fn load_defs(
|
||||||
let caps = re1.captures(line);
|
let caps = re1.captures(line);
|
||||||
if caps.is_none() {
|
if caps.is_none() {
|
||||||
if line.trim() != "" {
|
if line.trim() != "" {
|
||||||
warn!("Syntax Error in definitions line {}: `{}`", line_nr, line);
|
error!("Syntax Error in definitions line {}: `{}`", line_nr, line);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -546,6 +553,25 @@ pub fn load_defs(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
["rotationy", rotation_y] => {
|
||||||
|
if let Ok(rotation_y_float) = rotation_y.parse::<f32>() {
|
||||||
|
state.rotation = Quat::from_rotation_y(PI * rotation_y_float);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error!("Can't parse float: {line}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
["angularmomentum", x, y, z] => {
|
||||||
|
if let (Ok(x_float), Ok(y_float), Ok(z_float)) =
|
||||||
|
(x.parse::<f32>(), y.parse::<f32>(), z.parse::<f32>()) {
|
||||||
|
state.angular_momentum = Quat::from_euler(EulerRot::XYZ, x_float, y_float, z_float);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error!("Can't parse float: {line}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Parsing chats
|
// Parsing chats
|
||||||
["chat", chat_name] => {
|
["chat", chat_name] => {
|
||||||
|
|
Loading…
Reference in a new issue