MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / onRender

Method onRender

Engine/source/T3D/vehicles/guiSpeedometer.cpp:153–220  ·  view source on GitHub ↗

----------------------------------------------------------------------------- Gui onRender method. Renders an analog speedometer needle over a specified bitmap background. */

Source from the content-addressed store, hash-verified

151 Renders an analog speedometer needle over a specified bitmap background.
152*/
153void GuiSpeedometerHud::onRender(Point2I offset, const RectI &updateRect)
154{
155 // Must have a connection
156 GameConnection* conn = GameConnection::getConnectionToServer();
157 if (!conn)
158 return;
159
160 // Requires either a vehicle control object or a vehicle-mounted player
161 Vehicle* vehicle = dynamic_cast<Vehicle*>(conn->getControlObject());
162 if(!vehicle){
163 Player * player = dynamic_cast<Player*>(conn->getControlObject());
164 if(!player) return;
165 if (!player->isMounted()) return;
166 vehicle = dynamic_cast<Vehicle*>(player->getObjectMount());
167 if(!vehicle) return;
168 }
169
170 Parent::onRender(offset,updateRect);
171
172 // Use the vehicle's velocity as its speed...
173 mSpeed = vehicle->getVelocity().len();
174 if (mSpeed > mMaxSpeed)
175 mSpeed = mMaxSpeed;
176
177 // Calculate center point if necessary and roll in offsets
178 Point2F center = mCenter;
179 if (mIsZero(center.x) && mIsZero(center.y))
180 {
181 center.x = getExtent().x / 2.0f;
182 center.y = getExtent().y / 2.0f;
183 }
184 F32 fillOffset = GFX->getFillConventionOffset(); // Find the fill offset
185 Point2F viewCenter(offset.x + fillOffset + center.x, offset.y + fillOffset + center.y);
186
187 // Handle rotation calculations
188 F32 rotation, spinAngle;
189 rotation = mMinAngle + (mMaxAngle - mMinAngle) * (mSpeed / mMaxSpeed);
190 spinAngle = mDegToRad(rotation);
191 MatrixF rotMatrix(EulerF(0.0, 0.0, spinAngle));
192
193 // Set up the needle vertex list
194 Point3F vertList[5];
195 vertList[0].set(+mNeedleLength,-mNeedleWidth,0);
196 vertList[1].set(+mNeedleLength,+mNeedleWidth,0);
197 vertList[2].set(-mTailLength ,+mNeedleWidth,0);
198 vertList[3].set(-mTailLength ,-mNeedleWidth,0);
199 vertList[4].set(+mNeedleLength,-mNeedleWidth,0); //// Get back to the start!
200
201 // Create a GFXStateBlock description if one has not been set.
202 if (mBlendSB.isNull())
203 {
204 GFXStateBlockDesc desc;
205 desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha);
206 desc.samplersDefined = true;
207 mBlendSB = GFX->createStateBlock(desc);
208 }
209 GFX->setStateBlock(mBlendSB);
210 GFX->setTexture(0, NULL);

Callers

nothing calls this directly

Calls 15

mIsZeroFunction · 0.85
mDegToRadFunction · 0.85
color4fFunction · 0.85
beginFunction · 0.85
vertex2fFunction · 0.85
endFunction · 0.85
isMountedMethod · 0.80
getObjectMountMethod · 0.80
setBlendMethod · 0.80
createStateBlockMethod · 0.80
mulPMethod · 0.80
getControlObjectMethod · 0.45

Tested by

no test coverage detected