![]() |
Box2D Cannon Game With Stars
Ian Parberry's "Introduction to Game Physics"
|
The cannon. More...
#include <Cannon.h>
Public Member Functions | |
CCannon () | |
Constructor. More... | |
void | Initialize () |
Set up a cannon. More... | |
void | Explode () |
Make cannon explode. More... | |
bool | Fire () |
Fire the cannon. More... | |
void | BarrelUp (float a) |
Rotate the cannon barrel. More... | |
void | SetSpeed (float s) |
Set the motor speed in the wheel joints. More... | |
void | CoolDown () |
Cannon temperature drops over time. More... | |
void | Reset () |
Reset cannon to initial conditions. More... | |
const UINT | GetNumFired () const |
Get number of cannonballs fired in this level. More... | |
const bool | IsDead () const |
Whether cannon has exploded. More... | |
const Vector2 | GetPos () const |
Get cannon position. More... | |
void | GetTemps (float &, float &) const |
Get current and max temperatures. More... | |
Private Member Functions | |
b2Body * | CreateBase (float, float, int) |
Create a cannon base in Physics World. More... | |
b2Body * | CreateBarrel (float, float, int) |
Create a cannon barrel in Physics World. More... | |
b2Body * | CreateWheel (float, float, int) |
Create a cannon wheel in Physics World. More... | |
void | DeliverImpulse (b2Body *, const b2Vec2 &, const b2Vec2 &=b2Vec2(0, 0)) |
Apply an impulse in Physics World. More... | |
void | MakeCollide (b2Body *b) |
Make cannon parts collide-able in Physics World. More... | |
Private Attributes | |
b2Body * | m_pBarrel = nullptr |
Pointer to cannon barrel in Physics World. | |
b2Body * | m_pBase = nullptr |
Pointer to cannon base in Physics World. | |
b2Body * | m_pWheel1 = nullptr |
Pointer to cannon wheel in Physics World. | |
b2Body * | m_pWheel2 = nullptr |
Pointer to cannon wheel in Physics World. | |
b2WheelJoint * | m_pWheelJoint1 = nullptr |
Pointer to cannon wheel joint in Physics World. | |
b2WheelJoint * | m_pWheelJoint2 = nullptr |
Pointer to cannon wheel joint in Physics World. | |
b2RevoluteJoint * | m_pBarrelJoint = nullptr |
Pointer to cannon barrel body in Physics World. | |
float | m_fTemp = 0.0f |
Cannon temperature. | |
float | m_fMaxTemp = 0.0f |
Cannon maximum allowable temperature. | |
UINT | m_nBallsFired = 0 |
Number of cannonballs fired in current level. | |
bool | m_bExploded = false |
Whether cannon has exploded. | |
Additional Inherited Members | |
![]() | |
static b2World * | m_pPhysicsWorld = nullptr |
Pointer to Box2D Physics World. | |
static CRenderer * | m_pRenderer = nullptr |
Pointer to Render World. | |
static CObjectManager * | m_pObjectManager = nullptr |
Pointer to object manager. | |
static LParticleEngine2D * | m_pParticleEngine = nullptr |
Pointer to particle engine. | |
static bool | m_bEasterEgg = false |
Easter egg! | |
The cannon.
The cannon is a composite made up of several sprites in Render World and several bodies in Physics World. It represents the player.
CCannon::CCannon | ( | ) |
Constructor.
The constructor uses Reset() to construct the cannon.
void CCannon::BarrelUp | ( | float | a | ) |
Rotate the cannon barrel.
Rotate the cannon barrel up or down by a small increment.
a | Angle increment in radians. Positive means up, negative means down. |
void CCannon::CoolDown | ( | ) |
Cannon temperature drops over time.
Cool the cannon's temperature, unless it is too high already, in which case mark it for exploding on the next fire.
|
private |
Create a cannon barrel in Physics World.
x | Cannon barrel's x coordinate in Render World. |
y | Cannon barrel's y coordinate in Render World. |
nIndex | Cannon barrel's collision group index. |
|
private |
Create a cannon base in Physics World.
x | Cannon base's x coordinate in Render World. |
y | Cannon base's y coordinate in Render World. |
nIndex | Cannon base's collision group index. |
|
private |
Create a cannon wheel in Physics World.
x | Cannon wheel's x coordinate in Render World. |
y | Cannon wheel's y coordinate in Render World. |
nIndex | Cannon wheel's collision group index. |
|
private |
Apply an impulse in Physics World.
Deliver an impulse to part of the cannon, which is made up of many bodies in Physics World.
b | Body to apply impulse to. |
v | Vector direction and magnitude of impulse. |
ds | Vector dispolacement to point at which impulse is applied. |
void CCannon::Explode | ( | ) |
Make cannon explode.
Make the cannon explode by destroying the joints, applying impulses to cannon parts so that they fly apart, and resetting their collision group indices so that they can collide.
bool CCannon::Fire | ( | ) |
Fire the cannon.
Create a cannonball in both Render World and Physics World and send it on its way. Apply a recoil impulse to the cannon in Physics World. Increment the cannon's temperature. All this is assuming that the cannon isn't nose down and hasn't already exploded.
const UINT CCannon::GetNumFired | ( | ) | const |
Get number of cannonballs fired in this level.
Return the number of cannonballs fired in this level of the game.
const Vector2 CCannon::GetPos | ( | ) | const |
Get cannon position.
Reader function for the cannon's position.
void CCannon::GetTemps | ( | float & | tcur, |
float & | tmax | ||
) | const |
Get current and max temperatures.
Reader function for the current and max temperatures.
tcur | [OUT] Current temperature. |
tmax | [OUT] Maximum temperature experienced. |
void CCannon::Initialize | ( | ) |
Set up a cannon.
Create a cannon in Physics World and Object World, linking the two representations together. All positions are hard-coded.
const bool CCannon::IsDead | ( | ) | const |
Whether cannon has exploded.
Determine whether the cannon has exploded already.
|
private |
Make cannon parts collide-able in Physics World.
Reset the collision group index for part of cannon, which is made up of many bodies in Physics World.
b | Body to reset collision group index of. |
void CCannon::Reset | ( | ) |
Reset cannon to initial conditions.
Reset the cannon to its initial conditions ready for a new game to begin.
void CCannon::SetSpeed | ( | float | s | ) |
Set the motor speed in the wheel joints.
Start the cannon moving using motors in the wheels.
s | Speed of cannon. Negative means left, positive means right. |