Exemplo n.º 1
0
	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);
	}
Exemplo n.º 2
0
	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);
	}