void CPlayer::update(float mFrameTime) { Vector2f lastPos{pos}; float currentSpeed{speed}, lastAngle{angle}, radius{hexagonGame.getRadius()}; int movement{hexagonGame.getInputMovement()}; if(hexagonGame.getInputFocused()) currentSpeed = focusSpeed; angle += currentSpeed * movement * mFrameTime; Vector2f tempPos{getOrbitFromDegrees(startPos, angle, radius)}; Vector2f pLeftCheck{getOrbitFromDegrees(tempPos, angle - 90, 0.01f)}; Vector2f pRightCheck{getOrbitFromDegrees(tempPos, angle + 90, 0.01f)}; for(const auto& wall : getManager().getComponents<CWall>("wall")) { if(movement == -1 && wall->isOverlapping(pLeftCheck)) angle = lastAngle; if(movement == 1 && wall->isOverlapping(pRightCheck)) angle = lastAngle; if(wall->isOverlapping(pos)) { if(!getInvincible()) dead = true; lastPos = getMovedTowards(lastPos, {0, 0}, 5 * hexagonGame.getSpeedMultiplier()); pos = lastPos; hexagonGame.death(); return; } } pos = getOrbitFromDegrees(startPos, angle, radius); }
void CPlayer::update(float mFT) { swapBlinkTimer.update(mFT); if(deadEffectTimer.update(mFT) && hexagonGame.getLevelStatus().tutorialMode) deadEffectTimer.stop(); if(hexagonGame.getLevelStatus().swapEnabled) if(swapTimer.update(mFT)) swapTimer.stop(); Vec2f lastPos{pos}; float currentSpeed{speed}, lastAngle{angle}, radius{hexagonGame.getRadius()}; int movement{hexagonGame.getInputMovement()}; if(hexagonGame.getInputFocused()) currentSpeed = focusSpeed; angle += currentSpeed * movement * mFT; if(hexagonGame.getLevelStatus().swapEnabled && hexagonGame.getInputSwap() && swapTimer.isStopped()) { hexagonGame.getAssets().playSound("swap.ogg"); swapTimer.restart(); angle += 180; } Vec2f tempPos{getOrbitFromDegrees(startPos, angle, radius)}; Vec2f pLeftCheck{getOrbitFromDegrees(tempPos, angle - 90, 0.01f)}; Vec2f pRightCheck{getOrbitFromDegrees(tempPos, angle + 90, 0.01f)}; for(const auto& wall : getManager().getEntities(HGGroup::Wall)) { const auto& cwall(wall->getComponent<CWall>()); if((movement == -1 && cwall.isOverlapping(pLeftCheck)) || (movement == 1 && cwall.isOverlapping(pRightCheck))) angle = lastAngle; if(cwall.isOverlapping(pos)) { deadEffectTimer.restart(); if(!Config::getInvincible()) dead = true; lastPos = getMovedTowards(lastPos, ssvs::zeroVec2f, 5 * hexagonGame.getSpeedMultDM()); pos = lastPos; hexagonGame.death(); return; } } pos = getOrbitFromDegrees(startPos, angle, radius); }