Compare commits

..

7 commits

11 changed files with 351 additions and 49 deletions

BIN
assets/models/frameflat.bin Normal file

Binary file not shown.

View file

@ -0,0 +1,244 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.2.60",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0,
1,
2,
3,
4,
5,
6
]
}
],
"nodes":[
{
"mesh":0,
"name":"Cube",
"scale":[
0.05000000074505806,
0.05000000074505806,
0.054999999701976776
],
"translation":[
-0.949999988079071,
0,
0
]
},
{
"mesh":0,
"name":"Cube.001",
"scale":[
0.05000000074505806,
0.05000000074505806,
0.054999999701976776
],
"translation":[
0.949999988079071,
0,
0
]
},
{
"mesh":0,
"name":"Cube.002",
"scale":[
0.05000000074505806,
0.05000000074505806,
0.054999999701976776
]
},
{
"mesh":0,
"name":"Cube.003",
"scale":[
0.05000000074505806,
0.05000000074505806,
0.054999999701976776
],
"translation":[
0.4749999940395355,
0,
0
]
},
{
"mesh":0,
"name":"Cube.004",
"scale":[
0.05000000074505806,
0.05000000074505806,
0.054999999701976776
],
"translation":[
-0.4749999940395355,
0,
0
]
},
{
"mesh":0,
"name":"Cube.005",
"rotation":[
0.5,
0.5,
0.5,
0.5000000596046448
],
"scale":[
0.05000000074505806,
0.05000000074505806,
0.06499999761581421
],
"translation":[
0,
0,
0.949999988079071
]
},
{
"mesh":0,
"name":"Cube.006",
"rotation":[
0.5,
0.5,
0.5,
0.5000000596046448
],
"scale":[
0.05000000074505806,
0.05000000074505806,
0.06499999761581421
],
"translation":[
0,
0,
-0.949999988079071
]
}
],
"materials":[
{
"doubleSided":true,
"name":"Material",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":0
},
"metallicFactor":0.9920634627342224,
"roughnessFactor":0.4047618806362152
}
}
],
"meshes":[
{
"name":"Cube",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3,
"material":0
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
}
],
"images":[
{
"mimeType":"image/jpeg",
"name":"metal",
"uri":"textures/metal.jpg"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":88,
"max":[
1,
1,
16.200002670288086
],
"min":[
-1,
-1,
-16.200002670288086
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":88,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":88,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":180,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":1056,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":1056,
"byteOffset":1056,
"target":34962
},
{
"buffer":0,
"byteLength":704,
"byteOffset":2112,
"target":34962
},
{
"buffer":0,
"byteLength":360,
"byteOffset":2816,
"target":34963
}
],
"samplers":[
{
"magFilter":9729,
"minFilter":9987
}
],
"buffers":[
{
"byteLength":3176,
"uri":"frameflat.bin"
}
]
}

BIN
src/blender/frameflat.blend Normal file

Binary file not shown.

BIN
src/blender/lightorb.blend Normal file

Binary file not shown.

Binary file not shown.

View file

@ -125,5 +125,23 @@
- So much dust and rocks out here and I can't touch any of it. - So much dust and rocks out here and I can't touch any of it.
- It's driving me nuts!!! Aaaah!! - It's driving me nuts!!! Aaaah!!
- goto: pig_node_main - goto: pig_node_main
- if: pig$geologist
I have some questions about geology:
- Shoot!
- label: pig_node_geo
- I've seen some gigantic moonlets around here...:
- Yeah they keep getting ejected from the moon Thebe!
- Thebe is so tiny, it's gravitation is about the same as its centrifugal force, so the escape velocity is almost nonexistant.
- So a small asteroid impact can release a bunch of rocks into the orbit, some large enough to be considered moonlets.
- Makes you wonder how anything even still remains of Thebe after all these years.
- What's the composition of the nearby rocks?:
- It's debris ejected from Thebe, which is mostly silicate minerals and various metals.
- Water ice is also very abundant here, and we're extracting oxygen and water from it.
- I've seen simple organic molecules here too, but nothing alive.
- Nothing native, anyway.
- That's all, thanks!:
- Cool, anything else you wanted?
- goto: pig_node_main
- goto: pig_node_geo
- "[Hang up]": [] - "[Hang up]": []
- goto: EXIT - goto: EXIT

View file

@ -891,6 +891,24 @@
- set: geologist - set: geologist
- But that can wait, there's FLYING to be done! - But that can wait, there's FLYING to be done!
- goto: entrypoint - goto: entrypoint
- if: $geologist
I have some questions about geology:
- Shoot!
- label: pig_node_geo
- I've seen some gigantic moonlets around here...:
- Yeah they keep getting ejected from the moon Thebe!
- Thebe is so tiny, it's gravitation is about the same as its centrifugal force, so the escape velocity is almost nonexistant.
- So a small asteroid impact can release a bunch of rocks into the orbit, some large enough to be considered moonlets.
- Makes you wonder how anything even still remains of Thebe after all these years.
- What's the composition of the nearby rocks?:
- It's debris ejected from Thebe, which is mostly silicate minerals and various metals.
- Water ice is also very abundant here, and we're extracting oxygen and water from it.
- I've seen simple organic molecules here too, but nothing alive.
- Nothing native, anyway.
- That's all, thanks!:
- Cool, anything else you wanted?
- goto: pig_node_main
- goto: pig_node_geo
- if: $pig - if: $pig
You're pork! Yummy! I'm starving!: You're pork! Yummy! I'm starving!:
- label: pork - label: pork

View file

@ -747,22 +747,24 @@ fn spawn_scenes(
for (name, template, pos, rot) in scene_defs { for (name, template, pos, rot) in scene_defs {
let pos = DVec3::new( let pos = DVec3::new(
root_state.pos[0] + pos[0], root_state.pos[0] + pos[0],
root_state.pos[1] - pos[2], root_state.pos[1] + pos[2],
root_state.pos[2] + pos[1], root_state.pos[2] - pos[1],
); );
if Some(name.to_string()) == root_state.name { if Some(name.to_string()) == root_state.name {
let mut state = ParserState::default();
state.class = DefClass::Actor;
state.pos = pos;
state.relative_to = root_state.relative_to.clone();
// Bevy's X is Blender's X (rot[0])
// Bevy's Y is Blender's Z (rot[2])
// Bevy's Z is Blender's -Y (-rot[1])
state.rotation = Quat::from_euler(EulerRot::YZX, rot[2], -rot[1], rot[0]);
match template { match template {
"cruiser" => { "cruiser" => {
let mut state = ParserState::default();
state.class = DefClass::Actor;
state.pos = pos;
state.model = Some("cruiser".to_string()); state.model = Some("cruiser".to_string());
state.rotation = Quat::from_euler(EulerRot::XYZ, rot[0], rot[1], rot[2]);
// command: relativeto ?
state.relative_to = root_state.relative_to.clone();
// command: name Cruiser // command: name Cruiser
state.name = Some("Cruiser".to_string()); state.name = Some("Cruiser".to_string());
@ -796,19 +798,12 @@ fn spawn_scenes(
// command: pointofinterest yes // command: pointofinterest yes
state.is_point_of_interest = true; state.is_point_of_interest = true;
ew_spawn.send(SpawnEvent(state)); ew_spawn.send(SpawnEvent(state));
} }
"shippingcontainer" => { "shippingcontainer" => {
let mut state = ParserState::default();
state.class = DefClass::Actor;
state.pos = pos;
state.model = Some("shippingcontainer".to_string()); state.model = Some("shippingcontainer".to_string());
state.rotation = Quat::from_euler(EulerRot::XYZ, rot[0], rot[1], rot[2]);
// command: relativeto ?
state.relative_to = root_state.relative_to.clone();
// command: name Cruiser // command: name Cruiser
state.name = Some("Shipping Container".to_string()); state.name = Some("Shipping Container".to_string());
@ -824,20 +819,11 @@ fn spawn_scenes(
// command: density 500 // command: density 500
state.density = 500.0; state.density = 500.0;
// command: pointofinterest yes
ew_spawn.send(SpawnEvent(state)); ew_spawn.send(SpawnEvent(state));
} }
"fueltank" => { "fueltank" => {
let mut state = ParserState::default();
state.class = DefClass::Actor;
state.pos = pos;
state.model = Some("fueltank".to_string()); state.model = Some("fueltank".to_string());
state.rotation = Quat::from_euler(EulerRot::XYZ, rot[0], rot[1], rot[2]);
// command: relativeto ?
state.relative_to = root_state.relative_to.clone();
// command: name "Fuel Tank" // command: name "Fuel Tank"
state.name = Some("Fuel Tank".to_string()); state.name = Some("Fuel Tank".to_string());
@ -860,10 +846,54 @@ fn spawn_scenes(
// command: chat_achievement no // command: chat_achievement no
state.chat_counts_towards_achievements = false; state.chat_counts_towards_achievements = false;
// command: pointofinterest yes
ew_spawn.send(SpawnEvent(state)); ew_spawn.send(SpawnEvent(state));
} }
_ => {} "frameflat" => {
state.model = Some("frameflat".to_string());
// command: name "Frame"
state.name = Some("Frame".to_string());
// command: id lunaplatform
state.id = String::from("lunaplatform");
// command: scale 30
state.model_scale = 30.0;
// command: angularmomentum 0 0 0
state.angular_momentum = DVec3::ZERO;
// command: collider mesh
state.collider_is_one_mesh_of_scene = true;
state.collider_is_mesh = true;
// command: density 50000
state.density = 50000.0;
ew_spawn.send(SpawnEvent(state));
}
"lightorb" => {
state.model = Some("lightorb".to_string());
// command: name "Light Orb"
state.name = Some("Light Orb".to_string());
// command: collider mesh
state.collider_is_one_mesh_of_scene = true;
state.collider_is_mesh = true;
// command: scale 0.25
state.model_scale = 0.25;
// command: light FF8F4A 4000000
state.light_color = Some(Color::Srgba(Srgba::hex("FF8F4A").unwrap()));
state.light_brightness = 4000000.0;
ew_spawn.send(SpawnEvent(state));
}
_ => {
error!("Can't find template named `{template}' in cmd::spawn_scenes!");
}
} }
} }
} }

View file

@ -337,11 +337,11 @@ actor 700 -100 -1100 suitv2
armodel_tertiary suit_ar_bra armodel_tertiary suit_ar_bra
angularmomentum 0 0 0 angularmomentum 0 0 0
wants maxrotation 0 wants maxrotation 0
wants maxvelocity none wants matchvelocitywith lunaplatform
rotationy 108 rotationy 108
rotationx 180 rotationx 180
pronoun she pronoun she
scene 22 0 0 workshop scene 12 0 -30 workshop
relativeto Luna relativeto Luna
actor -20 10 -23 MeteorAceGT actor -20 10 -23 MeteorAceGT
name "Luna's experimental MeteorAceGT" name "Luna's experimental MeteorAceGT"
@ -356,18 +356,6 @@ actor 700 -100 -1100 suitv2
angularmomentum 0 0 0.2 angularmomentum 0 0 0.2
pointofinterest yes pointofinterest yes
message_on_entry "NOT DESIGNED FOR HUMAN USE" message_on_entry "NOT DESIGNED FOR HUMAN USE"
actor -9 4 11 lightorb
relativeto Luna
name "Light Orb"
collider mesh
scale 0.25
light FF8F4A 4000000
actor -8 1 -9 lightorb
relativeto Luna
name "Light Orb"
collider mesh
scale 0.25
light FF8F4A 4000000
actor -55e3 31e3 0 suitv2 actor -55e3 31e3 0 suitv2
template person template person
@ -486,7 +474,7 @@ actor -3300 10 0 pizzeria
pointofinterest yes pointofinterest yes
collider handcrafted collider handcrafted
angularmomentum 0 0 0 angularmomentum 0 0 0
actor -120 0 20 MeteorAceGT actor -120 0 50 MeteorAceGT
name "MeteorAceGT™" name "MeteorAceGT™"
relativeto pizzeria relativeto pizzeria
scale 5 scale 5
@ -498,7 +486,7 @@ actor -3300 10 0 pizzeria
density 500 density 500
angularmomentum 0 0 0.2 angularmomentum 0 0 0.2
pointofinterest yes pointofinterest yes
actor -133 5 14 suitv2 actor -133 5 58 suitv2
template person template person
relativeto pizzeria relativeto pizzeria
wants matchvelocitywith pizzeria wants matchvelocitywith pizzeria

View file

@ -2,8 +2,11 @@
// DO NOT MODIFY MANUALLY, CHANGES WILL BE OVERWRITTEN! // DO NOT MODIFY MANUALLY, CHANGES WILL BE OVERWRITTEN!
[ [
("test", "cruiser", [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]), ("test", "cruiser", [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]),
("workshop", "fueltank", [21.132, -24.376015, 0.0], [1.1160387, -1.308411, -0.9967722]), ("workshop", "frameflat", [0.0, 0.0, -21.541874], [0.0, 0.0, 0.0]),
("workshop", "shippingcontainer", [0.0, 0.0, 0.0], [-0.026294278, 0.000376441, 0.014312184]), ("workshop", "fueltank", [21.074543, -2.4312592, -4.7432747], [1.2519244, -0.0, -0.6819759]),
("workshop", "shippingcontainer", [0.0, 12.0, 0.0], [-0.053937975, -0.013098141, 0.0]), ("workshop", "lightorb", [-15.720036, -32.41476, 4.1765304], [0.0, 0.0, 0.0]),
("workshop", "shippingcontainer", [0.0, -12.0, 0.0], [0.061487854, 0.08236491, -0.051188234]), ("workshop", "lightorb", [11.5042095, -21.65356, -4.566242], [0.0, 0.0, 0.0]),
("workshop", "shippingcontainer", [-0.52376616, 12.351211, -2.6598575], [-0.11791781, -0.02345992, 1.5838965]),
("workshop", "shippingcontainer", [-13.479424, 10.191104, -8.136984], [-0.05393797, -0.013098141, 1.7229813]),
("workshop", "shippingcontainer", [12.42811, 14.157182, -4.2369785], [-0.02553346, 0.042504273, 1.5108364]),
] ]

View file

@ -51,6 +51,7 @@ pub fn asset_name_to_path(name: &str) -> &'static str {
"MeteorAceGT" => "models/MeteorAceGT.glb#Scene0", "MeteorAceGT" => "models/MeteorAceGT.glb#Scene0",
"cruiser" => "models/cruiser.glb#Scene0", "cruiser" => "models/cruiser.glb#Scene0",
"shippingcontainer" => "models/shippingcontainer.glb#Scene0", "shippingcontainer" => "models/shippingcontainer.glb#Scene0",
"frameflat" => "models/frameflat.gltf#Scene0",
"fueltank" => "models/fueltank.glb#Scene0", "fueltank" => "models/fueltank.glb#Scene0",
"satellite" => "models/satellite.gltf#Scene0", "satellite" => "models/satellite.gltf#Scene0",
"pizzeria" => "models/pizzeria3.gltf#Scene0", "pizzeria" => "models/pizzeria3.gltf#Scene0",