add GameMechanicAttributes::is_wrcp() function
This commit is contained in:
parent
bf51afcf1d
commit
af7fcdd5cb
42
src/model.rs
42
src/model.rs
@ -107,12 +107,6 @@ pub struct GameMechanicAccelerator{
|
|||||||
pub acceleration:Planar64Vec3
|
pub acceleration:Planar64Vec3
|
||||||
}
|
}
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
pub enum GameMechanicBooster{
|
|
||||||
Affine(Planar64Affine3),//capable of SetVelocity,DotVelocity,normal booster,bouncy part,redirect velocity, and much more
|
|
||||||
Velocity(Planar64Vec3),//straight up boost velocity adds to your current velocity
|
|
||||||
Energy{direction:Planar64Vec3,energy:Planar64},//increase energy in direction
|
|
||||||
}
|
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
|
||||||
pub enum GameMechanicCheckpoint{
|
pub enum GameMechanicCheckpoint{
|
||||||
Ordered{
|
Ordered{
|
||||||
mode_id:u32,
|
mode_id:u32,
|
||||||
@ -123,14 +117,23 @@ pub enum GameMechanicCheckpoint{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
|
pub enum GameMechanicBooster{
|
||||||
|
Affine(Planar64Affine3),//capable of SetVelocity,DotVelocity,normal booster,bouncy part,redirect velocity, and much more
|
||||||
|
Velocity(Planar64Vec3),//straight up boost velocity adds to your current velocity
|
||||||
|
Energy{direction:Planar64Vec3,energy:Planar64},//increase energy in direction
|
||||||
|
}
|
||||||
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
pub enum TrajectoryChoice{
|
pub enum TrajectoryChoice{
|
||||||
HighArcLongDuration,//underhand lob at target: less horizontal speed and more air time
|
HighArcLongDuration,//underhand lob at target: less horizontal speed and more air time
|
||||||
LowArcShortDuration,//overhand throw at target: more horizontal speed and less air time
|
LowArcShortDuration,//overhand throw at target: more horizontal speed and less air time
|
||||||
}
|
}
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
pub enum GameMechanicSetTrajectory{
|
pub enum GameMechanicSetTrajectory{
|
||||||
|
//Speed-type SetTrajectory
|
||||||
AirTime(Time),//air time (relative to gravity direction) is invariant across mass and gravity changes
|
AirTime(Time),//air time (relative to gravity direction) is invariant across mass and gravity changes
|
||||||
Height(Planar64),//boost height (relative to gravity direction) is invariant across mass and gravity changes
|
Height(Planar64),//boost height (relative to gravity direction) is invariant across mass and gravity changes
|
||||||
|
DotVelocity{direction:Planar64Vec3,dot:Planar64},//set your velocity in a specific direction without touching other directions
|
||||||
|
//Velocity-type SetTrajectory
|
||||||
TargetPointTime{//launch on a trajectory that will land at a target point in a set amount of time
|
TargetPointTime{//launch on a trajectory that will land at a target point in a set amount of time
|
||||||
target_point:Planar64Vec3,
|
target_point:Planar64Vec3,
|
||||||
time:Time,//short time = fast and direct, long time = launch high in the air, negative time = wrong way
|
time:Time,//short time = fast and direct, long time = launch high in the air, negative time = wrong way
|
||||||
@ -141,7 +144,18 @@ pub enum GameMechanicSetTrajectory{
|
|||||||
trajectory_choice:TrajectoryChoice,
|
trajectory_choice:TrajectoryChoice,
|
||||||
},
|
},
|
||||||
Velocity(Planar64Vec3),//SetVelocity
|
Velocity(Planar64Vec3),//SetVelocity
|
||||||
DotVelocity{direction:Planar64Vec3,dot:Planar64},//set your velocity in a specific direction without touching other directions
|
}
|
||||||
|
impl GameMechanicSetTrajectory{
|
||||||
|
fn is_velocity(&self)->bool{
|
||||||
|
match self{
|
||||||
|
GameMechanicSetTrajectory::AirTime(_)
|
||||||
|
|GameMechanicSetTrajectory::Height(_)
|
||||||
|
|GameMechanicSetTrajectory::DotVelocity{direction:_,dot:_}=>false,
|
||||||
|
GameMechanicSetTrajectory::TargetPointTime{target_point:_,time:_}
|
||||||
|
|GameMechanicSetTrajectory::TargetPointSpeed{target_point:_,speed:_,trajectory_choice:_}
|
||||||
|
|GameMechanicSetTrajectory::Velocity(_)=>true,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
pub enum ZoneBehaviour{
|
pub enum ZoneBehaviour{
|
||||||
@ -217,6 +231,20 @@ impl GameMechanicAttributes{
|
|||||||
||self.teleport_behaviour.is_some()
|
||self.teleport_behaviour.is_some()
|
||||||
||self.accelerator.is_some()
|
||self.accelerator.is_some()
|
||||||
}
|
}
|
||||||
|
pub fn is_wrcp(&self,current_mode_id:u32)->bool{
|
||||||
|
self.trajectory.as_ref().map_or(false,|t|t.is_velocity())
|
||||||
|
&&match &self.teleport_behaviour{
|
||||||
|
Some(TeleportBehaviour::StageElement(
|
||||||
|
GameMechanicStageElement{
|
||||||
|
mode_id,
|
||||||
|
stage_id:_,
|
||||||
|
force:true,
|
||||||
|
behaviour:StageElementBehaviour::Trigger|StageElementBehaviour::Teleport
|
||||||
|
}
|
||||||
|
))=>current_mode_id==*mode_id,
|
||||||
|
_=>false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[derive(Default,Clone,Hash,Eq,PartialEq)]
|
#[derive(Default,Clone,Hash,Eq,PartialEq)]
|
||||||
pub struct ContactingAttributes{
|
pub struct ContactingAttributes{
|
||||||
|
Loading…
Reference in New Issue
Block a user