MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / DoPlayerAfterburnControl

Function DoPlayerAfterburnControl

Descent3/object.cpp:2187–2243  ·  view source on GitHub ↗

Does afterburn effects to a player ship

Source from the content-addressed store, hash-verified

2185
2186// Does afterburn effects to a player ship
2187void DoPlayerAfterburnControl(game_controls *controls, object *objp) {
2188 static int afterburner_id = -1;
2189 int slot = objp->id;
2190
2191 if (controls->afterburn_thrust > 0) {
2192 Players[slot].last_afterburner_time = Gametime;
2193
2194 if (Players[slot].afterburn_time_left > 0) {
2195 float punch_scalar = 1.0;
2196
2197 if (Players[slot].afterburn_time_left == (AFTERBURN_TIME))
2198 AddToShakeMagnitude(objp->mtype.phys_info.mass / 2);
2199
2200 if (Players[slot].afterburn_time_left > (AFTERBURN_TIME * .90))
2201 punch_scalar = 1.8f;
2202 else if (Players[slot].afterburn_time_left > (AFTERBURN_TIME * .80) &&
2203 Players[slot].afterburn_time_left < (AFTERBURN_TIME * .90)) {
2204 float norm = Players[slot].afterburn_time_left - (AFTERBURN_TIME * .80);
2205 norm /= (AFTERBURN_TIME * .1);
2206 punch_scalar = 1.0 + (norm * .8);
2207 }
2208
2209 if (OBJECT_OUTSIDE(objp))
2210 controls->forward_thrust = controls->afterburn_thrust * 1.6 * punch_scalar;
2211 else
2212 controls->forward_thrust = controls->afterburn_thrust * 1.6 * punch_scalar;
2213
2214 Players[slot].flags |= PLAYER_FLAGS_AFTERBURN_ON | PLAYER_FLAGS_THRUSTED;
2215 Players[slot].afterburn_time_left -= Frametime;
2216 if (Players[slot].afterburn_time_left < 0)
2217 Players[slot].afterburn_time_left = 0;
2218 } else {
2219 Players[slot].afterburn_time_left = 0;
2220 Players[slot].flags &= ~PLAYER_FLAGS_AFTERBURN_ON;
2221 }
2222 } else {
2223 Players[slot].flags &= ~PLAYER_FLAGS_AFTERBURN_ON;
2224
2225 if (Players[slot].afterburn_time_left < AFTERBURN_TIME) {
2226 if (Players[slot].energy > 5.0) {
2227 float useage;
2228 if (afterburner_id == -1)
2229 afterburner_id = FindObjectIDName("Afterburner");
2230
2231 if (afterburner_id != -1 && Players[slot].inventory.CheckItem(OBJ_POWERUP, afterburner_id))
2232 useage = Frametime * 2;
2233 else
2234 useage = Frametime;
2235
2236 Players[slot].afterburn_time_left += useage;
2237 Players[slot].afterburn_time_left = std::min<float>(AFTERBURN_TIME, Players[slot].afterburn_time_left);
2238
2239 Players[slot].energy -= (useage);
2240 }
2241 }
2242 }
2243}
2244

Callers 1

DoFlyingControlFunction · 0.85

Calls 3

AddToShakeMagnitudeFunction · 0.85
FindObjectIDNameFunction · 0.85
CheckItemMethod · 0.80

Tested by

no test coverage detected