SuperTuxKart
|
Public Member Functions | |
Flyable (AbstractKart *kart, PowerupManager::PowerupType type, float mass=1.0f) | |
void | updateGraphics (float dt) OVERRIDE |
Called once per rendered frame. | |
virtual bool | updateAndDelete (int ticks) |
Updates this flyable. | |
virtual void | setAnimation (AbstractKartAnimation *animation) |
virtual HitEffect * | getHitEffect () const |
Returns the hit effect object to use when this objects hits something. | |
bool | isOwnerImmunity (const AbstractKart *kart_hit) const |
Returns true if the item hit the kart who shot it (to avoid that an item that's too close to the shooter hits the shooter). | |
virtual bool | hit (AbstractKart *kart, PhysicalObject *obj=NULL) |
Callback from the physics in case that a kart or physical object is hit. | |
void | explode (AbstractKart *kart, PhysicalObject *obj=NULL, bool secondary_hits=true) |
Creates the explosion physical effect, i.e. | |
unsigned int | getOwnerId () |
bool | hasAnimation () const |
Returns if this flyable has an animation playing (e.g. | |
void | setAdjustUpVelocity (bool f) |
If true the up velocity of the flyable will be adjust so that the flyable stays at a height close to the average height. | |
void | setPositionOffset (const Vec3 &o) |
Sets the offset to be used when determining the terrain under the flyable. | |
virtual void | hitTrack () |
Called when this flyable hits the track. | |
bool | hasHit () |
Enables/disables adjusting ov velocity depending on height above terrain. | |
void | setHasHit () |
Indicates that something was hit and that this object must be removed. | |
void | reset () OVERRIDE |
Resets this flyable. | |
PowerupManager::PowerupType | getType () const |
Returns the type of flyable. | |
AbstractKart * | getOwner () const |
Returns the owner's kart. | |
void | setDoTerrainInfo (bool d) |
Sets wether Flyable should update TerrainInfo as part of its update call, or if the inheriting object will update TerrainInfo itself (or perhaps not at all if it is not needed). | |
const Vec3 & | getExtend () const |
Returns the size (extend) of the mesh. | |
void | addForRewind (const std::string &uid) |
virtual void | undoEvent (BareNetworkString *buffer) OVERRIDE |
Called when an event needs to be undone. | |
virtual void | rewindToEvent (BareNetworkString *buffer) OVERRIDE |
Called when an event needs to be replayed. | |
virtual void | undoState (BareNetworkString *buffer) OVERRIDE |
Undo the effects of the given state, but do not rewind to that state (which is done by rewindTo). | |
virtual void | saveTransform () OVERRIDE |
Called before a rewind. | |
virtual void | computeError () OVERRIDE |
Called when a rewind is finished, and is used to compute the error caused by the rewind (which is then visually smoothed over time). | |
virtual BareNetworkString * | saveState (std::vector< std::string > *ru) OVERRIDE |
Provides a copy of the state of the object in one memory buffer. | |
virtual void | restoreState (BareNetworkString *buffer, int count) OVERRIDE |
Called when a state needs to be replayed. | |
bool | hasServerState () const |
virtual void | onFireFlyable () |
Call when the item is (re-)fired (during rewind if needed) by projectile_manager. | |
virtual void | onDeleteFlyable () |
void | setCreatedTicks (int ticks) |
Public Member Functions inherited from Moveable | |
scene::ISceneNode * | getNode () const |
Returns the scene node of this moveable. | |
void | setNode (scene::ISceneNode *n) |
Sets the mesh for this model. | |
virtual const btVector3 & | getVelocity () const |
const btVector3 & | getVelocityLC () const |
virtual void | setVelocity (const btVector3 &v) |
const Vec3 & | getXYZ () const |
float | getHeading () const |
Returns the heading between -pi and pi. | |
float | getPitch () const |
Returns the pitch of the kart, restricted to between -pi/2 and pi/2. | |
float | getRoll () const |
Returns the roll of the kart between -pi and pi. | |
const btQuaternion | getRotation () const |
virtual void | flyUp () |
Enter flying mode. | |
virtual void | flyDown () |
virtual void | stopFlying () |
virtual void | setXYZ (const Vec3 &a) |
Sets the XYZ coordinates of the moveable. | |
void | setRotation (const btMatrix3x3 &m) |
Sets the rotation of the physical body this moveable. | |
void | setRotation (const btQuaternion &q) |
Sets the rotation of the physical body this moveable. | |
virtual void | reset () |
The reset position must be set before calling reset. | |
virtual void | update (int ticks) |
Updates the current position and rotation from the corresponding physics body, and then calls updateGraphics to position the model correctly. | |
btRigidBody * | getBody () const |
void | createBody (float mass, btTransform &trans, btCollisionShape *shape, float restitution) |
Creates the bullet rigid body for this moveable. | |
const btTransform & | getTrans () const |
void | setTrans (const btTransform &t) |
Places this moveable at a certain location and stores this transform in this Moveable, so that it can be accessed easily. | |
void | updatePosition () |
Updates the current position and rotation. | |
virtual void | updateGraphics (float dt)=0 |
Called once per rendered frame. | |
void | prepareSmoothing () |
void | checkSmoothing () |
const btTransform & | getSmoothedTrans () const |
const Vec3 & | getSmoothedXYZ () const |
virtual const std::string & | getIdent () const |
Public Member Functions inherited from SmoothNetworkBody | |
SmoothNetworkBody (bool enable=false) | |
void | reset () |
void | setEnable (bool val) |
bool | isEnabled () const |
void | setSmoothRotation (bool val) |
void | setAdjustVerticalOffset (bool val) |
void | prepareSmoothing (const btTransform ¤t_transform, const Vec3 ¤t_velocity) |
void | checkSmoothing (const btTransform ¤t_transform, const Vec3 ¤t_velocity) |
Adds a new error between graphical and physical position/rotation. | |
void | updateSmoothedGraphics (const btTransform ¤t_transform, const Vec3 ¤t_velocity, float dt) |
void | setSmoothedTransform (const btTransform &t) |
const btTransform & | getSmoothedTrans () const |
const Vec3 & | getSmoothedXYZ () const |
void | setMinAdjustLength (float val) |
void | setMaxAdjustLength (float val) |
void | setMinAdjustSpeed (float val) |
void | setMaxAdjustTime (float val) |
void | setAdjustLengthThreshold (float val) |
Public Member Functions inherited from TerrainInfo | |
TerrainInfo () | |
Constructor to initialise terrain data. | |
TerrainInfo (const Vec3 &pos) | |
Constructor to initialise terrain data at a given position. | |
bool | getSurfaceInfo (const Vec3 &from, Vec3 *position, const Material **m) |
Does a raycast upwards from the given position If the raycast indicated that the kart is 'under something' (i.e. | |
virtual void | update (const btMatrix3x3 &rotation, const Vec3 &from) |
Update the terrain information based on the latest position. | |
virtual void | update (const Vec3 &from) |
Update the terrain information based on the latest position. | |
virtual void | update (const Vec3 &from, const Vec3 &towards) |
Update the terrain information based on the latest position. | |
virtual void | update (const btMatrix3x3 &rotation) |
Simple wrapper with no offset. | |
float | getHoT () const |
Returns the height of the terrain. | |
const Material * | getMaterial () const |
Returns the current material the kart is on. | |
const Material * | getLastMaterial () const |
Returns the previous material the kart was one (which might be the same as getMaterial() ). | |
const Vec3 & | getNormal () const |
Returns the normal of the terrain the kart is on. | |
float | getTerrainPitch (float heading) const |
Returns the pitch of the terrain depending on the heading. | |
const btVector3 & | getHitPoint () const |
Returns the hit point of the raycast. | |
const Vec3 & | getOrigin () const |
Public Member Functions inherited from Rewinder | |
Rewinder (const std::string &ui="") | |
virtual void | saveTransform ()=0 |
Called before a rewind. | |
virtual void | computeError ()=0 |
Called when a rewind is finished, and is used to compute the error caused by the rewind (which is then visually smoothed over time). | |
virtual BareNetworkString * | saveState (std::vector< std::string > *ru)=0 |
Provides a copy of the state of the object in one memory buffer. | |
virtual void | undoEvent (BareNetworkString *buffer)=0 |
Called when an event needs to be undone. | |
virtual void | rewindToEvent (BareNetworkString *buffer)=0 |
Called when an event needs to be replayed. | |
virtual void | restoreState (BareNetworkString *buffer, int count)=0 |
Called when a state needs to be replayed. | |
virtual void | undoState (BareNetworkString *buffer)=0 |
Undo the effects of the given state, but do not rewind to that state (which is done by rewindTo). | |
virtual void | reset () |
Nothing to do here. | |
virtual std::function< void()> | getLocalStateRestoreFunction () |
const std::string & | getUniqueIdentity () const |
bool | rewinderAdd () |
Add this object to the list of all rewindable objects in the rewind manager. | |
template<typename T > | |
std::shared_ptr< T > | getShared () |
Static Public Member Functions | |
static void | init (const XMLNode &node, scene::IMesh *model, PowerupManager::PowerupType type) |
Initialises the static members of this class for a certain type with default values and with settings from powerup.xml. | |
Protected Member Functions | |
void | getClosestKart (const AbstractKart **minKart, float *minDistSquared, Vec3 *minDelta, const AbstractKart *inFrontOf=NULL, const bool backwards=false) const |
Returns information on what is the closest kart and at what distance it is. | |
void | getLinearKartItemIntersection (const Vec3 &origin, const AbstractKart *target_kart, float item_XY_velocity, float gravity, float forw_offset, float *fire_angle, float *up_velocity) |
Returns information on the parameters needed to hit a target kart moving at constant velocity and direction for a given speed in the XZ-plane. | |
void | createPhysics (float y_offset, const Vec3 &velocity, btCollisionShape *shape, float restitution, const btVector3 &gravity=btVector3(0.0f, 0.0f, 0.0f), const bool rotates=false, const bool turn_around=false, const btTransform *customDirection=NULL) |
init bullet for moving objects like projectiles | |
void | moveToInfinity (bool set_moveable_trans=true) |
It's called when undoing the creation or destruction of flyables, so that it will not affected the current game, and it will be deleted in computeError. | |
void | removePhysics () |
void | fixSFXSplitscreen (SFXBase *sfx) |
Protected Member Functions inherited from Moveable | |
void | updateSmoothedGraphics (float dt) |
virtual void | updateGraphics (const Vec3 &off_xyz=Vec3(0.0f, 0.0f, 0.0f), const btQuaternion &off_rotation=btQuaternion(0.0f, 0.0f, 0.0f, 1.0f)) |
Updates the graphics model. | |
Protected Member Functions inherited from Rewinder | |
void | setUniqueIdentity (const std::string &uid) |
Protected Attributes | |
AbstractKart * | m_owner |
Kart which shot this flyable. | |
PowerupManager::PowerupType | m_type |
Type of the powerup. | |
btCollisionShape * | m_shape |
Collision shape of this Flyable. | |
float | m_max_height |
Maximum height above terrain. | |
float | m_min_height |
Minimum height above terrain. | |
float | m_average_height |
Average of average of m_{min,ax}_height. | |
float | m_force_updown |
Force pushing the Flyable up. | |
float | m_speed |
Speed of this Flyable. | |
const float | m_mass |
Mass of this Flyable. | |
Vec3 | m_extend |
Size of this flyable. | |
uint16_t | m_ticks_since_thrown |
Time since thrown. | |
bool | m_has_server_state |
bool | m_owner_has_temporary_immunity |
If set to true, the kart that throwns this flyable can't collide with it for a short time. | |
bool | m_deleted_once |
int | m_last_deleted_ticks |
int | m_max_lifespan |
Set to something > -1 if this flyable should auto-destrcut after that may ticks. | |
int | m_created_ticks |
Protected Attributes inherited from Moveable | |
btTransform | m_transform |
The bullet transform of this rigid body. | |
UserPointer | m_user_pointer |
scene::ISceneNode * | m_node |
std::unique_ptr< btRigidBody > | m_body |
std::unique_ptr< KartMotionState > | m_motion_state |
Static Protected Attributes | |
static float | m_st_speed [PowerupManager::POWERUP_MAX] |
Speed of the projectile. | |
static scene::IMesh * | m_st_model [PowerupManager::POWERUP_MAX] |
The mesh of this Flyable. | |
static float | m_st_min_height [PowerupManager::POWERUP_MAX] |
Minimum height above track. | |
static float | m_st_max_height [PowerupManager::POWERUP_MAX] |
Max height above track. | |
static float | m_st_force_updown [PowerupManager::POWERUP_MAX] |
Force pushing up/down. | |
static Vec3 | m_st_extend [PowerupManager::POWERUP_MAX] |
Size of the model. | |
Private Attributes | |
bool | m_has_hit_something |
bool | m_adjust_up_velocity |
If this flag is set, the up velocity of the kart will not be adjusted in case that the objects is too high or too low above the terrain. | |
Vec3 | m_position_offset |
An offset that is added when doing the raycast for terrain. | |
bool | m_do_terrain_info |
If this variable is set to true (which is the default) flyable will update the height of terrain when its updateAndDelete function is called. | |
uint32_t | m_compressed_gravity_vector |
AbstractKartAnimation * | m_animation |
If the flyable is in a cannon, this is the pointer to the cannon animation. | |
|
virtual |
Called when a rewind is finished, and is used to compute the error caused by the rewind (which is then visually smoothed over time).
Implements Rewinder.
|
protected |
init bullet for moving objects like projectiles
Creates a bullet physics body for the flyable item.
forw_offset | How far ahead of the kart the flyable should be positioned. Necessary to avoid exploding a rocket inside of the firing kart. |
velocity | Initial velocity of the flyable. |
shape | Collision shape of the flyable. |
gravity | Gravity to use for this flyable. |
rotates | True if the item should rotate, otherwise the angular factor is set to 0 preventing rotations from happening. |
turn_around | True if the item is fired backwards. |
custom_direction | If defined the initial heading for this item, otherwise the kart's heading will be used. |
void Flyable::explode | ( | AbstractKart * | kart_hit, |
PhysicalObject * | object = NULL , |
||
bool | secondary_hits = true |
||
) |
Creates the explosion physical effect, i.e.
pushes the karts and ph appropriately. The corresponding visual/sfx needs to be added manually!
kart_hit | If non-NULL a kart that was directly hit. |
object | If non-NULL a physical item that was hit directly. |
secondary_hits | True if items that are not directly hit should also be affected. |
|
protected |
Returns information on what is the closest kart and at what distance it is.
All 3 parameters first are of type 'out'. 'inFrontOf' can be set if you wish to know the closest kart in front of some karts (will ignore those behind). Useful e.g. for throwing projectiles in front only.
|
virtual |
|
protected |
Returns information on the parameters needed to hit a target kart moving at constant velocity and direction for a given speed in the XZ-plane.
origin | Location of the kart shooting the item. |
target_kart | Which kart to target. |
item_xz_speed | Speed of the item projected in XZ plane. |
gravity | The gravity used for this item. |
forw_offset | How far ahead of the kart the item is shot (so that the item does not originate inside of the shooting kart. |
fire_angle | Returns the angle to fire the item at. |
up_velocity | Returns the upwards velocity to use for the item. |
|
inline |
Returns if this flyable has an animation playing (e.g.
cannon).
|
inline |
Enables/disables adjusting ov velocity depending on height above terrain.
Missiles can 'follow the terrain' with this adjustment, but gravity will basically be disabled.
|
virtual |
Callback from the physics in case that a kart or physical object is hit.
kart | The kart hit (NULL if no kart was hit). |
object | The object that was hit (NULL if none). |
Reimplemented in Bowling, Cake, Plunger, and RubberBall.
|
inlinevirtual |
|
static |
Initialises the static members of this class for a certain type with default values and with settings from powerup.xml.
The | xml node containing settings. |
model | The mesh to use. |
type | The type of flyable. |
bool Flyable::isOwnerImmunity | ( | const AbstractKart * | kart_hit | ) | const |
Returns true if the item hit the kart who shot it (to avoid that an item that's too close to the shooter hits the shooter).
kart | Kart who was hit. |
|
protected |
It's called when undoing the creation or destruction of flyables, so that it will not affected the current game, and it will be deleted in computeError.
set_moveable_trans | If true, set m_transform in moveable, so the graphical node will have the same transform, otherwise only the physical body will be moved to infinity |
|
virtual |
Call when the item is (re-)fired (during rewind if needed) by projectile_manager.
Reimplemented in Bowling, Cake, Plunger, and RubberBall.
|
inlinevirtual |
Resets this flyable.
Reimplemented from Moveable.
|
virtual |
Called when a state needs to be replayed.
This is called during rewind, i.e. when going forward in time again, and only for confirmed states.
Implements Rewinder.
Reimplemented in Plunger, and RubberBall.
|
inlinevirtual |
Called when an event needs to be replayed.
This is called during rewind, i.e. when going forward in time again.
Implements Rewinder.
|
virtual |
Provides a copy of the state of the object in one memory buffer.
The memory is managed by the RewindManager.
[out] | ru | The unique identity of rewinder writing to. |
Implements Rewinder.
Reimplemented in Plunger, and RubberBall.
|
virtual |
Called before a rewind.
Is used to save the previous position of an object before a rewind, so that the error due to a rewind can be computed.
Implements Rewinder.
|
inline |
If true the up velocity of the flyable will be adjust so that the flyable stays at a height close to the average height.
f | True if the up velocity should be adjusted. |
|
inline |
Sets the offset to be used when determining the terrain under the flyable.
This needs to be used in case that an object might be just under the actual terrain (e.g. rubber ball on a steep uphill slope).
|
inlinevirtual |
Called when an event needs to be undone.
This is called while going backwards for rewinding - all stored events will get an 'undo' call.
Implements Rewinder.
|
inlinevirtual |
Undo the effects of the given state, but do not rewind to that state (which is done by rewindTo).
This is called while going backwards for rewinding - all stored events will get an 'undo' call.
Implements Rewinder.
|
virtual |
Updates this flyable.
It calls Moveable::update. If this function returns true, the flyable will be deleted by the projectile manager.
dt | Time step size. |
Reimplemented in Bowling, Plunger, and RubberBall.
|
virtual |
|
private |
If this flag is set, the up velocity of the kart will not be adjusted in case that the objects is too high or too low above the terrain.
Otherwise gravity will not work correctly on this object.
|
private |
If the flyable is in a cannon, this is the pointer to the cannon animation.
NULL otherwise.
|
private |
If this variable is set to true (which is the default) flyable will update the height of terrain when its updateAndDelete function is called.
If it's necessary to update the height of terrain yourself (e.g. order of operations is important) set this to false with a call do setDoTerrainInfo().
|
private |
An offset that is added when doing the raycast for terrain.
This is useful in case that the position of the object is just under the terrain (perhaps due to floating point errors), and would otherwise result in an invalid terrain.
|
protected |
Time since thrown.
used so a kart can't hit himself when trying something, and also to put some time limit to some collectibles