fix attributes & modes
This commit is contained in:
parent
cb80773db4
commit
77fb784c7e
97
src/rbx.rs
97
src/rbx.rs
@ -124,12 +124,13 @@ impl ModesBuilder{
|
|||||||
self.stage_updates.push((mode_id,stage_id,stage_update));
|
self.stage_updates.push((mode_id,stage_id,stage_update));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Planar64Vec3,force_intersecting:bool,model_id:model::ModelId,modes_builder:&mut ModesBuilder,wormhole_in_model_to_id:&mut HashMap<model::ModelId,u32>)->attr::CollisionAttributes{
|
fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Planar64Vec3,model_id:model::ModelId,modes_builder:&mut ModesBuilder,wormhole_in_model_to_id:&mut HashMap<model::ModelId,u32>,wormhole_id_to_out_model:&mut HashMap<u32,model::ModelId>)->attr::CollisionAttributes{
|
||||||
let name=object.name.as_str();
|
let name=object.name.as_str();
|
||||||
let mut general=attr::GeneralAttributes::default();
|
let mut general=attr::GeneralAttributes::default();
|
||||||
let mut intersecting=attr::IntersectingAttributes::default();
|
let mut intersecting=attr::IntersectingAttributes::default();
|
||||||
let mut contacting=attr::ContactingAttributes::default();
|
let mut contacting=attr::ContactingAttributes::default();
|
||||||
let mut force_can_collide=can_collide;
|
let mut force_can_collide=can_collide;
|
||||||
|
let mut force_intersecting=false;
|
||||||
match name{
|
match name{
|
||||||
"Water"=>{
|
"Water"=>{
|
||||||
force_can_collide=false;
|
force_can_collide=false;
|
||||||
@ -148,8 +149,20 @@ fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Plana
|
|||||||
// behaviour:model::StageElementBehaviour::Unordered
|
// behaviour:model::StageElementBehaviour::Unordered
|
||||||
// })),
|
// })),
|
||||||
"SetVelocity"=>general.trajectory=Some(attr::SetTrajectory::Velocity(velocity)),
|
"SetVelocity"=>general.trajectory=Some(attr::SetTrajectory::Velocity(velocity)),
|
||||||
|
"MapStart"=>{
|
||||||
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
|
modes_builder.insert_mode(
|
||||||
|
gameplay_modes::ModeId::MAIN,
|
||||||
|
gameplay_modes::Mode::new(
|
||||||
|
gameplay_style::StyleModifiers::roblox_bhop(),
|
||||||
|
model_id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
"MapFinish"=>{
|
"MapFinish"=>{
|
||||||
force_can_collide=false;
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
modes_builder.push_mode_update(
|
modes_builder.push_mode_update(
|
||||||
gameplay_modes::ModeId::MAIN,
|
gameplay_modes::ModeId::MAIN,
|
||||||
gameplay_modes::ModeUpdate::zone(
|
gameplay_modes::ModeUpdate::zone(
|
||||||
@ -160,6 +173,7 @@ fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Plana
|
|||||||
},
|
},
|
||||||
"MapAnticheat"=>{
|
"MapAnticheat"=>{
|
||||||
force_can_collide=false;
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
modes_builder.push_mode_update(
|
modes_builder.push_mode_update(
|
||||||
gameplay_modes::ModeId::MAIN,
|
gameplay_modes::ModeId::MAIN,
|
||||||
gameplay_modes::ModeUpdate::zone(
|
gameplay_modes::ModeUpdate::zone(
|
||||||
@ -178,8 +192,37 @@ fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Plana
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
other=>{
|
other=>{
|
||||||
if let Some(captures)=lazy_regex::regex!(r"^(Force)?(Spawn|SpawnAt|Trigger|Teleport|Platform)(\d+)$")
|
let regman=lazy_regex::regex!(r"^(BonusStart|Spawn|WormholeOut)(\d+)$");
|
||||||
|
if let Some(captures)=regman.captures(other){
|
||||||
|
match &captures[1]{
|
||||||
|
"BonusStart"=>{
|
||||||
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
|
modes_builder.insert_mode(
|
||||||
|
gameplay_modes::ModeId::new(captures[2].parse::<u32>().unwrap()),
|
||||||
|
gameplay_modes::Mode::new(
|
||||||
|
gameplay_style::StyleModifiers::roblox_bhop(),
|
||||||
|
model_id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
"Spawn"=>{
|
||||||
|
force_intersecting=true;
|
||||||
|
modes_builder.insert_stage(
|
||||||
|
gameplay_modes::ModeId::MAIN,
|
||||||
|
gameplay_modes::StageId::new(captures[2].parse::<u32>().unwrap()),
|
||||||
|
gameplay_modes::Stage::new(model_id),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
"WormholeOut"=>{
|
||||||
|
//this object is not special in strafe client, but the roblox mapping needs to be converted to model id
|
||||||
|
assert!(wormhole_id_to_out_model.insert(captures[2].parse::<u32>().unwrap(),model_id).is_none(),"Cannot have multiple WormholeOut with same id");
|
||||||
|
},
|
||||||
|
_=>(),
|
||||||
|
}
|
||||||
|
}else if let Some(captures)=lazy_regex::regex!(r"^(Force)?(Spawn|SpawnAt|Trigger|Teleport|Platform)(\d+)$")
|
||||||
.captures(other){
|
.captures(other){
|
||||||
|
force_intersecting=true;
|
||||||
modes_builder.push_mode_update(
|
modes_builder.push_mode_update(
|
||||||
gameplay_modes::ModeId::MAIN,
|
gameplay_modes::ModeId::MAIN,
|
||||||
gameplay_modes::ModeUpdate::element(
|
gameplay_modes::ModeUpdate::element(
|
||||||
@ -218,6 +261,7 @@ fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Plana
|
|||||||
),
|
),
|
||||||
"WormholeIn"=>{
|
"WormholeIn"=>{
|
||||||
force_can_collide=false;
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
assert!(wormhole_in_model_to_id.insert(model_id,captures[2].parse::<u32>().unwrap()).is_none(),"Impossible");
|
assert!(wormhole_in_model_to_id.insert(model_id,captures[2].parse::<u32>().unwrap()).is_none(),"Impossible");
|
||||||
},
|
},
|
||||||
_=>panic!("regex2[1] messed up bad"),
|
_=>panic!("regex2[1] messed up bad"),
|
||||||
@ -225,6 +269,7 @@ fn get_attributes(object:&rbx_dom_weak::Instance,can_collide:bool,velocity:Plana
|
|||||||
}else if let Some(captures)=lazy_regex::regex!(r"^Bonus(Finish|Anticheat)(\d+)$")
|
}else if let Some(captures)=lazy_regex::regex!(r"^Bonus(Finish|Anticheat)(\d+)$")
|
||||||
.captures(other){
|
.captures(other){
|
||||||
force_can_collide=false;
|
force_can_collide=false;
|
||||||
|
force_intersecting=true;
|
||||||
modes_builder.push_mode_update(
|
modes_builder.push_mode_update(
|
||||||
gameplay_modes::ModeId::new(captures[2].parse::<u32>().unwrap()),
|
gameplay_modes::ModeId::new(captures[2].parse::<u32>().unwrap()),
|
||||||
gameplay_modes::ModeUpdate::zone(
|
gameplay_modes::ModeUpdate::zone(
|
||||||
@ -417,52 +462,6 @@ pub fn convert(dom:rbx_dom_weak::WeakDom)->map::CompleteMap{
|
|||||||
//at this point a new model is going to be generated for sure.
|
//at this point a new model is going to be generated for sure.
|
||||||
let model_id=model::ModelId::new(models1.len() as u32);
|
let model_id=model::ModelId::new(models1.len() as u32);
|
||||||
|
|
||||||
let force_intersecting=match &object.name[..]{
|
|
||||||
"MapStart"=>{
|
|
||||||
modes_builder.insert_mode(
|
|
||||||
gameplay_modes::ModeId::MAIN,
|
|
||||||
gameplay_modes::Mode::new(
|
|
||||||
gameplay_style::StyleModifiers::roblox_bhop(),
|
|
||||||
model_id
|
|
||||||
)
|
|
||||||
);
|
|
||||||
true
|
|
||||||
},
|
|
||||||
other=>{
|
|
||||||
let regman=lazy_regex::regex!(r"^(BonusStart|Spawn|WormholeOut)(\d+)$");
|
|
||||||
if let Some(captures)=regman.captures(other){
|
|
||||||
match &captures[1]{
|
|
||||||
"BonusStart"=>{
|
|
||||||
modes_builder.insert_mode(
|
|
||||||
gameplay_modes::ModeId::new(captures[2].parse::<u32>().unwrap()),
|
|
||||||
gameplay_modes::Mode::new(
|
|
||||||
gameplay_style::StyleModifiers::roblox_bhop(),
|
|
||||||
model_id
|
|
||||||
)
|
|
||||||
);
|
|
||||||
true
|
|
||||||
},
|
|
||||||
"Spawn"=>{
|
|
||||||
modes_builder.insert_stage(
|
|
||||||
gameplay_modes::ModeId::MAIN,
|
|
||||||
gameplay_modes::StageId::new(captures[2].parse::<u32>().unwrap()),
|
|
||||||
gameplay_modes::Stage::new(model_id),
|
|
||||||
);
|
|
||||||
true
|
|
||||||
},
|
|
||||||
"WormholeOut"=>{
|
|
||||||
//this object is not special in strafe client, but the roblox mapping needs to be converted to model id
|
|
||||||
assert!(wormhole_id_to_out_model.insert(captures[2].parse::<u32>().unwrap(),model_id).is_none(),"Cannot have multiple WormholeOut with same id");
|
|
||||||
false
|
|
||||||
},
|
|
||||||
_=>false,
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//TODO: also detect "CylinderMesh" etc here
|
//TODO: also detect "CylinderMesh" etc here
|
||||||
let shape=match &object.class[..]{
|
let shape=match &object.class[..]{
|
||||||
"Part"=>{
|
"Part"=>{
|
||||||
@ -672,10 +671,10 @@ pub fn convert(dom:rbx_dom_weak::WeakDom)->map::CompleteMap{
|
|||||||
&object,
|
&object,
|
||||||
*can_collide,
|
*can_collide,
|
||||||
Planar64Vec3::try_from([velocity.x,velocity.y,velocity.z]).unwrap(),
|
Planar64Vec3::try_from([velocity.x,velocity.y,velocity.z]).unwrap(),
|
||||||
force_intersecting,
|
|
||||||
model_id,
|
model_id,
|
||||||
&mut modes_builder,
|
&mut modes_builder,
|
||||||
&mut wormhole_in_model_to_id,
|
&mut wormhole_in_model_to_id,
|
||||||
|
&mut wormhole_id_to_out_model,
|
||||||
);
|
);
|
||||||
models1.push(ModelOwnedAttributes{
|
models1.push(ModelOwnedAttributes{
|
||||||
mesh:indexed_model_id,
|
mesh:indexed_model_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user