Collision Math Toy
Game Physics with Bespoke Code
Loading...
Searching...
No Matches
CGate Class Reference

A gate. More...

#include <Gate.h>

Inheritance diagram for CGate:
Collaboration diagram for CGate:

Public Member Functions

 CGate (Shapes::CLineSeg *)
 Constructor.
 
 ~CGate ()
 Destructor.
 
bool NarrowPhase (Shapes::CDynamicCircle *)
 Narrow phase.
 

Private Attributes

Shapes::CLineSeg * m_pLineSeg = nullptr
 Pointer to line segment.
 

Additional Inherited Members

- Static Protected Attributes inherited from CCommon
static Sage::CSpriteRenderer * m_pRenderer = nullptr
 Pointer to the renderer.
 
static CObjectManagerm_pObjectManager = nullptr
 Pointer to the object manager.
 
static Sage::CParticleEngine2D * m_pFrontParticleEngine = nullptr
 Ptr to front particle engine.

 
static Sage::CParticleEngine2D * m_pBackParticleEngine = nullptr
 Ptr to back particle engine.
 
static bool m_bShowTrack = false
 Show trail of breadcrumbs.
 
static bool m_bShowReticles = false
 Show reticle at hit point.
 
static bool m_bShowImpacts = false
 Draw dots at collision points.
 
static bool m_bShowArrows = false
 Draw arrows for velocity vectors.
 
static bool m_bShowTangents = false
 Draw arrows for tangents.
 
static bool m_bShowSectors = false
 Draw arc sentinels and normals.
 
static bool m_bShowAABBs = false
 Draw shape AABBs.
 
static bool m_bShowLights = false
 Light up shapes on collision.
 
static bool m_bRotate = false
 Rotate kinematic shapes.
 
static bool m_bLaunch = false
 Launch a ball.
 
static bool m_bMute = false
 Mute the sound.
 
static float m_fNextBallScale = 0.5f
 Scale factor for ball size.
 
static int m_nMIterationsInit = 4
 Initial number of motion iterations.
 
static int m_nCIterationsInit = 6
 Initial number of collision iterations.
 
static int m_nMIterations = CCommon::m_nMIterationsInit
 Current number of motion iterations.
 
static int m_nCIterations = CCommon::m_nCIterationsInit
 Current number of collision iterations.
 
static bool m_bUseQuadTree = false
 Whether to use a quadtree.
 
static HWND m_hDlg = nullptr
 Control dialog box handle.
 
static float m_fLoad = 0.0f
 Processor load.
 
static float m_fLaunchSpeed = 1000.0f
 Speed at which the next ball will be launched.
 
static int m_nDesiredLaunchCnt = 1
 Number of balls to launch at next multilaunch.
 
static int m_nLaunched = 0
 Number of balls launched in current multilaunch.
 
static bool m_bMultiLaunch = false
 Whether launching multiple balls.
 
static int m_nBallsLaunched = 0
 Number of balls in play.
 
static float m_fFrequency = 60.0f*m_nMIterations
 Frequency, number of physics iterations per second.
 

Detailed Description

A gate allows circles to cross in one direction only. It's essentially a line segment with some code that handles the crossing-in-one-direction requirement. More specifically, if the circle's velocity is in the opposite direction to the line segment's normal vector CLineSeg::m_vNormal and the circle's speed is larger than some threshold, then the circle passes through. Otherwise it bounces off of the line segment. Recall that the direction of CLineSeg::m_vNormal depends on the order in which CLineSeg's end points were specified, so make sure you get it right.

Constructor & Destructor Documentation

◆ CGate()

CGate::CGate ( Shapes::CLineSeg * p)

Construct a closed and unlatched gate from a line segment.

Parameters
pPointer to a line segment.

Member Function Documentation

◆ NarrowPhase()

bool CGate::NarrowPhase ( Shapes::CDynamicCircle * p)

If a dynamic circle collides with a gate and it is moving in the correct direction and is fast enough, then the gate opens and the dynamic circle is allowed through. Otherwise the dynamic circle bounces off the gate as usual.

Parameters
pPointer to a dynamic circle.
Returns
true if the dynamic circle intersects the gate.
Here is the caller graph for this function: