FREESCAPE: implemented size of step for driller (and a basic implementation for other games)
This commit is contained in:
parent
b679362793
commit
c04b48db55
4 changed files with 45 additions and 6 deletions
|
@ -80,6 +80,17 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
|
|||
_noClipMode = false;
|
||||
_playerHeightNumber = 1;
|
||||
_angleRotationIndex = 0;
|
||||
|
||||
// TODO: this is not the same for every game
|
||||
_playerStepIndex = 6;
|
||||
_playerSteps.push_back(1);
|
||||
_playerSteps.push_back(2);
|
||||
_playerSteps.push_back(5);
|
||||
_playerSteps.push_back(10);
|
||||
_playerSteps.push_back(25);
|
||||
_playerSteps.push_back(50);
|
||||
_playerSteps.push_back(100);
|
||||
|
||||
_border = nullptr;
|
||||
_title = nullptr;
|
||||
_titleTexture = nullptr;
|
||||
|
@ -321,6 +332,12 @@ void FreescapeEngine::processInput() {
|
|||
case Common::KEYCODE_w:
|
||||
rotate(_angleRotations[_angleRotationIndex], 0);
|
||||
break;
|
||||
case Common::KEYCODE_s:
|
||||
increaseStepSize();
|
||||
break;
|
||||
case Common::KEYCODE_x:
|
||||
decreaseStepSize();
|
||||
break;
|
||||
case Common::KEYCODE_r:
|
||||
rise();
|
||||
break;
|
||||
|
|
|
@ -164,7 +164,9 @@ public:
|
|||
void generateInput();
|
||||
virtual void pressedKey(const int keycode);
|
||||
void move(CameraMovement direction, uint8 scale, float deltaTime);
|
||||
void changePlayerHeight(int delta);
|
||||
void changePlayerHeight(int index);
|
||||
void increaseStepSize();
|
||||
void decreaseStepSize();
|
||||
void rise();
|
||||
void lower();
|
||||
bool checkFloor(Math::Vector3d currentPosition);
|
||||
|
@ -205,6 +207,9 @@ public:
|
|||
uint16 _playerWidth;
|
||||
uint16 _playerDepth;
|
||||
|
||||
int _playerStepIndex;
|
||||
Common::Array<int> _playerSteps;
|
||||
|
||||
// Effects
|
||||
Common::Array<Common::String> _conditionSources;
|
||||
Common::Array<FCLInstructionVector> _conditions;
|
||||
|
|
|
@ -375,6 +375,7 @@ void DrillerEngine::drawDOSUI(Graphics::Surface *surface) {
|
|||
else
|
||||
drawStringInSurface(Common::String::format("%s", "J"), 57, 161, yellow, black, surface);
|
||||
|
||||
drawStringInSurface(Common::String::format("%3d", _playerSteps[_playerStepIndex]), 46, 153, yellow, black, surface);
|
||||
drawStringInSurface(Common::String::format("%07d", score), 240, 129, yellow, black, surface);
|
||||
|
||||
int hours = _countdown / 3600;
|
||||
|
|
|
@ -95,6 +95,20 @@ void FreescapeEngine::changePlayerHeight(int index) {
|
|||
_position.setValue(1, _position.y() + _playerHeight);
|
||||
}
|
||||
|
||||
void FreescapeEngine::increaseStepSize() {
|
||||
if (_playerStepIndex == int(_playerSteps.size()) - 1)
|
||||
return;
|
||||
|
||||
_playerStepIndex++;
|
||||
}
|
||||
|
||||
void FreescapeEngine::decreaseStepSize() {
|
||||
if (_playerStepIndex == 0)
|
||||
return;
|
||||
|
||||
_playerStepIndex--;
|
||||
}
|
||||
|
||||
void FreescapeEngine::rise() {
|
||||
debugC(1, kFreescapeDebugMove, "playerHeightNumber: %d", _playerHeightNumber);
|
||||
int previousAreaID = _currentArea->getAreaID();
|
||||
|
@ -155,20 +169,22 @@ void FreescapeEngine::move(CameraMovement direction, uint8 scale, float deltaTim
|
|||
debugC(1, kFreescapeDebugMove, "old player position: %f, %f, %f", _position.x(), _position.y(), _position.z());
|
||||
int previousAreaID = _currentArea->getAreaID();
|
||||
|
||||
float velocity = _movementSpeed * deltaTime;
|
||||
Math::Vector3d stepFront = _cameraFront * (_playerSteps[_playerStepIndex] * 0.5 / _cameraFront.length());
|
||||
Math::Vector3d stepRight = _cameraRight * (_playerSteps[_playerStepIndex] * 0.5 / _cameraRight.length());
|
||||
|
||||
float positionY = _position.y();
|
||||
switch (direction) {
|
||||
case kForwardMovement:
|
||||
_position = _position + _cameraFront * velocity;
|
||||
_position = _position + stepFront;
|
||||
break;
|
||||
case kBackwardMovement:
|
||||
_position = _position - _cameraFront * velocity;
|
||||
_position = _position - stepFront;
|
||||
break;
|
||||
case kRightMovement:
|
||||
_position = _position - _cameraRight * velocity;
|
||||
_position = _position - stepRight;
|
||||
break;
|
||||
case kLeftMovement:
|
||||
_position = _position + _cameraRight * velocity;
|
||||
_position = _position + stepRight;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue