mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-05 00:01:55 +00:00
TWINE: synced lerp methods with the original source
This commit is contained in:
parent
5c1ad5c786
commit
2a707b3dc9
engines/twine
@ -54,7 +54,7 @@ void Sound::setSamplePosition(int32 channelIdx, int32 x, int32 y, int32 z) {
|
||||
const int32 camY = _engine->_grid->_newCamera.y * SIZE_BRICK_Y;
|
||||
const int32 camZ = _engine->_grid->_newCamera.z * SIZE_BRICK_XZ;
|
||||
int32 distance = getDistance3D(camX, camY, camZ, x, y, z);
|
||||
distance = _engine->_collision->getAverageValue(0, distance, 10000, 255);
|
||||
distance = _engine->_collision->clampedLerp(0, distance, 10000, 255);
|
||||
const byte targetVolume = CLIP<byte>(255 - distance, 0, 255);
|
||||
_engine->_system->getMixer()->setChannelVolume(samplesPlaying[channelIdx], targetVolume);
|
||||
}
|
||||
|
@ -595,8 +595,8 @@ void Holomap::processHolomap() {
|
||||
|
||||
if (rotate) {
|
||||
const int32 dt = _engine->_lbaTime - time;
|
||||
xRot = _engine->_collision->getAverageValue(ClampAngle(xRot), _locations[currentLocation].angleX, 75, dt);
|
||||
yRot = _engine->_collision->getAverageValue(ClampAngle(yRot), _locations[currentLocation].angleY, 75, dt);
|
||||
xRot = _engine->_collision->clampedLerp(ClampAngle(xRot), _locations[currentLocation].angleX, 75, dt);
|
||||
yRot = _engine->_collision->clampedLerp(ClampAngle(yRot), _locations[currentLocation].angleY, 75, dt);
|
||||
redraw = true;
|
||||
}
|
||||
|
||||
|
@ -571,7 +571,7 @@ void Redraw::renderOverlays() {
|
||||
break;
|
||||
}
|
||||
case OverlayType::koNumberRange: {
|
||||
const int32 range = _engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - _engine->_lbaTime - 50);
|
||||
const int32 range = _engine->_collision->clampedLerp(overlay->info1, overlay->info0, 100, overlay->lifeTime - _engine->_lbaTime - 50);
|
||||
|
||||
char text[10];
|
||||
sprintf(text, "%d", range);
|
||||
|
@ -136,11 +136,11 @@ void Screens::fadeOut(const uint32 *pal) {
|
||||
fadeToBlack(pal);
|
||||
}
|
||||
|
||||
int32 Screens::lerp(int32 value, int32 start, int32 end, int32 t) {
|
||||
if (!end) {
|
||||
return start;
|
||||
int32 Screens::lerp(int32 val1, int32 val2, int32 nbstep, int32 step) { // RegleTrois32
|
||||
if (nbstep < 0) {
|
||||
return val2;
|
||||
}
|
||||
return (((start - value) * t) / end) + value;
|
||||
return (((val2 - val1) * step) / nbstep) + val1;
|
||||
}
|
||||
|
||||
void Screens::adjustPalette(uint8 r, uint8 g, uint8 b, const uint32 *rgbaPal, int32 intensity) {
|
||||
|
@ -82,20 +82,20 @@ bool Collision::standingOnActor(int32 actorIdx1, int32 actorIdx2) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
int32 Collision::getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay) const { // BoundRegleTrois
|
||||
if (delay <= 0) {
|
||||
return start;
|
||||
int32 Collision::clampedLerp(int32 val1, int32 val2, int32 nbstep, int32 step) const { // BoundRegleTrois
|
||||
if (step <= 0) {
|
||||
return val1;
|
||||
}
|
||||
|
||||
if (delay >= maxDelay) {
|
||||
return end;
|
||||
if (step >= nbstep) {
|
||||
return val2;
|
||||
}
|
||||
|
||||
return (((end - start) * delay) / maxDelay) + start;
|
||||
return val1 + (((val2 - val1) * step) / nbstep);
|
||||
}
|
||||
|
||||
void Collision::reajustPos(IVec3 &processActor, ShapeType brickShape) const {
|
||||
if (brickShape == ShapeType::kNone) {
|
||||
if (brickShape <= ShapeType::kSolid) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -167,16 +167,16 @@ void Collision::reajustPos(IVec3 &processActor, ShapeType brickShape) const {
|
||||
|
||||
switch (brickShape) {
|
||||
case ShapeType::kStairsTopLeft:
|
||||
processActor.y = yw + getAverageValue(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.x - xw);
|
||||
processActor.y = yw + clampedLerp(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.x - xw);
|
||||
break;
|
||||
case ShapeType::kStairsTopRight:
|
||||
processActor.y = yw + getAverageValue(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.z - zw);
|
||||
processActor.y = yw + clampedLerp(0, SIZE_BRICK_Y, SIZE_BRICK_XZ, processActor.z - zw);
|
||||
break;
|
||||
case ShapeType::kStairsBottomLeft:
|
||||
processActor.y = yw + getAverageValue(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.z - zw);
|
||||
processActor.y = yw + clampedLerp(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.z - zw);
|
||||
break;
|
||||
case ShapeType::kStairsBottomRight:
|
||||
processActor.y = yw + getAverageValue(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.x - xw);
|
||||
processActor.y = yw + clampedLerp(SIZE_BRICK_Y, 0, SIZE_BRICK_XZ, processActor.x - xw);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -54,7 +54,7 @@ public:
|
||||
*/
|
||||
bool standingOnActor(int32 actorIdx1, int32 actorIdx2) const;
|
||||
|
||||
int32 getAverageValue(int32 start, int32 end, int32 maxDelay, int32 delay) const;
|
||||
int32 clampedLerp(int32 start, int32 end, int32 maxDelay, int32 delay) const;
|
||||
|
||||
/**
|
||||
* Reajust actor position in scene according with brick shape bellow actor
|
||||
|
@ -544,7 +544,7 @@ void Extra::processExtras() { // GereExtras
|
||||
const int32 deltaT = _engine->_lbaTime - extra->spawnTime;
|
||||
|
||||
if (extra->type & ExtraType::EXPLOSION) {
|
||||
extra->sprite = _engine->_collision->getAverageValue(SPRITEHQR_EXPLOSION_FIRST_FRAME, 100, 30, deltaT);
|
||||
extra->sprite = _engine->_collision->clampedLerp(SPRITEHQR_EXPLOSION_FIRST_FRAME, 100, 30, deltaT);
|
||||
continue;
|
||||
}
|
||||
// process extra moving
|
||||
|
@ -510,11 +510,11 @@ void GameState::processGameoverAnimation() {
|
||||
return;
|
||||
}
|
||||
|
||||
const int32 avg = _engine->_collision->getAverageValue(40000, 3200, 500, _engine->_lbaTime - startLbaTime);
|
||||
const int32 cdot = _engine->_screens->lerp(1, ANGLE_360, 100, (_engine->_lbaTime - startLbaTime) % 100);
|
||||
const int32 zoom = _engine->_collision->clampedLerp(40000, 3200, TO_SECONDS(10), _engine->_lbaTime - startLbaTime);
|
||||
const int32 angle = _engine->_screens->lerp(1, ANGLE_360, TO_SECONDS(2), (_engine->_lbaTime - startLbaTime) % TO_SECONDS(2));
|
||||
|
||||
_engine->blitWorkToFront(rect);
|
||||
_engine->_renderer->setCameraAngle(0, 0, 0, 0, -cdot, 0, avg);
|
||||
_engine->_renderer->setCameraAngle(0, 0, 0, 0, -angle, 0, zoom);
|
||||
_engine->_renderer->renderIsoModel(0, 0, 0, ANGLE_0, ANGLE_0, ANGLE_0, gameOverPtr, dummy);
|
||||
|
||||
_engine->_lbaTime++;
|
||||
|
@ -952,7 +952,7 @@ static int32 lGIVE_GOLD_PIECES(TwinEEngine *engine, LifeScriptContext &ctx) {
|
||||
for (int16 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
|
||||
OverlayListStruct *overlay = &engine->_redraw->overlayList[i];
|
||||
if (overlay->info0 != -1 && overlay->type == OverlayType::koNumberRange) {
|
||||
overlay->info0 = engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - engine->_lbaTime - TO_SECONDS(1));
|
||||
overlay->info0 = engine->_collision->clampedLerp(overlay->info1, overlay->info0, TO_SECONDS(2), overlay->lifeTime - engine->_lbaTime - TO_SECONDS(1));
|
||||
overlay->info1 = engine->_gameState->_inventoryNumKashes;
|
||||
overlay->lifeTime = engine->_lbaTime + TO_SECONDS(3);
|
||||
hideRange = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user