God is here, and he will not be forgiveful about your sins

This commit is contained in:
Thomas 2022-01-06 11:07:56 +01:00
parent 1af32bafd8
commit 3dda6a690a
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
5 changed files with 24 additions and 23 deletions

View File

@ -21,7 +21,7 @@ players:
invaders: invaders:
fireCooldown: 20 fireCooldown: 20
size: 25 size: 25
speed: 2 speed: 7
distance: 10 # distance in pixels between invaders distance: 10 # distance in pixels between invaders
typeA: typeA:

View File

@ -35,7 +35,7 @@ public:
Position thrownVector; Position thrownVector;
Position thrownTransition; Position thrownTransition;
Position getLeftHandPos(unsigned screenWidth) const; Position getRightHandPos(unsigned screenWidth) const;
}; };

View File

@ -1,6 +1,6 @@
13651974094361129891 560753531201765499
Thomas,1000 Thomas,1000
Thomas,0 Thomas,300
Thomas,0 Thomas,0
Thomas,0 Thomas,0
Thomas,0 Thomas,0

View File

@ -63,11 +63,10 @@ void Game::displayGod() const {
case GodState::NONE: case GodState::NONE:
return; return;
case GodState::AWAKE: { case GodState::AWAKE: {
unsigned dividedCounter = god.counter/1; pm.drawGodBench(god.counter - GOD_BENCH_SIZE);
pm.drawGodBench(dividedCounter - GOD_BENCH_SIZE);
Position leftHand(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, dividedCounter-GOD_BENCH_SIZE); Position leftHand(GOD_HAND_DISTANCE, god.counter-GOD_BENCH_SIZE);
Position rightHand(GOD_HAND_DISTANCE, dividedCounter-GOD_BENCH_SIZE); Position rightHand(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, god.counter-GOD_BENCH_SIZE);
pm.drawGodLeftHand(leftHand); pm.drawGodLeftHand(leftHand);
pm.drawGodRightHand(rightHand); pm.drawGodRightHand(rightHand);
break; break;
@ -76,7 +75,7 @@ void Game::displayGod() const {
pm.drawGodBench(0); pm.drawGodBench(0);
Position leftHand(GOD_HAND_DISTANCE, 0); Position leftHand(GOD_HAND_DISTANCE, 0);
Position rightHand(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, 0); Position rightHand(god.getRightHandPos(pm.getScreenWidth()));
pm.drawGodLeftHand(leftHand); pm.drawGodLeftHand(leftHand);
pm.drawGodRightHand(rightHand); pm.drawGodRightHand(rightHand);
break; break;
@ -88,7 +87,7 @@ void Game::displayGod() const {
pm.drawGodBench(0); pm.drawGodBench(0);
pm.drawGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); pm.drawGodLeftHand(Position(GOD_HAND_DISTANCE, 0));
Position pos(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, 0); Position pos(god.getRightHandPos(pm.getScreenWidth()));
Position endPos = invIndexToPos(god.thrownInvPosX, god.thrownInvPosY); Position endPos = invIndexToPos(god.thrownInvPosX, god.thrownInvPosY);
applyBezier(pos, god.thrownTransition, god.counter / 100.0); applyBezier(pos, god.thrownTransition, god.counter / 100.0);
@ -98,6 +97,7 @@ void Game::displayGod() const {
pm.drawGodRightHand(pos); pm.drawGodRightHand(pos);
// TODO remove "closed" arg // TODO remove "closed" arg
if(god.state==GodState::RETRIEVE2){ if(god.state==GodState::RETRIEVE2){
pos+=Position(GOD_HAND_SIZE/2, GOD_HAND_SIZE/2); pos+=Position(GOD_HAND_SIZE/2, GOD_HAND_SIZE/2);
pos-=Position(confData.invadersSize/2, confData.invadersSize/2); pos-=Position(confData.invadersSize/2, confData.invadersSize/2);
displayInvader(pos, god.thrownInvType); displayInvader(pos, god.thrownInvType);
@ -109,7 +109,7 @@ void Game::displayGod() const {
pm.drawGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); pm.drawGodLeftHand(Position(GOD_HAND_DISTANCE, 0));
// compute start position (not sure if we should store it or compute it each time ?) // compute start position (not sure if we should store it or compute it each time ?)
Position handPos = god.getLeftHandPos(pm.getScreenWidth()); Position handPos = god.getRightHandPos(pm.getScreenWidth());
Position invaderPos = handPos; Position invaderPos = handPos;
applyTransformation(invaderPos, GOD_HAND_SIZE, confData.invadersSize); applyTransformation(invaderPos, GOD_HAND_SIZE, confData.invadersSize);
@ -117,14 +117,15 @@ void Game::displayGod() const {
invaderPos = invaderPos + a; invaderPos = invaderPos + a;
displayInvader(invaderPos, god.thrownInvType); displayInvader(invaderPos, god.thrownInvType);
if(god.counter>60){ if(god.counter<30){
// handling hand retraction // handling hand retraction
unsigned handCounter; unsigned handCounter;
if(god.counter>30)handCounter = 30-god.counter; if(god.counter<15)handCounter = god.counter;
else handCounter = god.counter; else handCounter = 30-god.counter;
handPos = handPos + god.thrownVector * (handCounter / 100.0); handPos = handPos + god.thrownVector * (handCounter / 100.0);
pm.drawGodRightHand(handPos);
} }
pm.drawGodRightHand(handPos);
break; break;
} }
} }

View File

@ -18,7 +18,7 @@ void Game::manageGod() {
break; break;
} }
case GodState::WAIT: { case GodState::WAIT: {
if (god.counter == 50) { if (god.counter == 100) {
// init throw // init throw
god.counter = 0; god.counter = 0;
god.state = GodState::RETRIEVE1; god.state = GodState::RETRIEVE1;
@ -43,18 +43,18 @@ void Game::manageGod() {
case GodState::RETRIEVE2: { case GodState::RETRIEVE2: {
if (god.counter == 0) { if (god.counter == 0) {
god.state = GodState::THROW; god.state = GodState::THROW;
god.counter = 0;
// compute the launch vector // compute the launch vector
Position invaderMiddlePos(pm.getScreenWidth() - GOD_HAND_DISTANCE - GOD_HAND_SIZE / 2, Position invaderMiddlePos(pm.getScreenWidth() - GOD_HAND_DISTANCE - GOD_HAND_SIZE / 2,
GOD_HAND_SIZE / 2); GOD_HAND_SIZE / 2);
playerID target; playerID target;
if (players.size() == 1)target = 0; // don't want to use random if not needed if (players.size() == 1)target = 0; // don't want to use random if not needed
else target = rand() % players.size(); else target = rand() % players.size();
Position playerMiddlePos(players[target].x + confData.playersWidth / 2, Position playerMiddlePos(players[target].x + confData.playersWidth / 2,
pm.getScreenWidth() - PLAYER_HEIGHT / 2); pm.getScreenHeight() - PLAYER_HEIGHT / 2);
god.thrownVector = playerMiddlePos - invaderMiddlePos; god.thrownVector = playerMiddlePos - invaderMiddlePos;
god.thrownVector = god.thrownVector / (god.thrownVector.computeMagnitude() / 1000.0); god.thrownVector = god.thrownVector / (god.thrownVector.computeMagnitude() / 1000.0);
@ -67,7 +67,7 @@ void Game::manageGod() {
++god.counter; ++god.counter;
Position invaderPos = god.getLeftHandPos(pm.getScreenWidth()); Position invaderPos = god.getRightHandPos(pm.getScreenWidth());
applyTransformation(invaderPos, GOD_HAND_SIZE, confData.invadersSize); applyTransformation(invaderPos, GOD_HAND_SIZE, confData.invadersSize);
Position a = god.thrownVector * (god.counter / 100.0); Position a = god.thrownVector * (god.counter / 100.0);
invaderPos = invaderPos + a; invaderPos = invaderPos + a;
@ -75,11 +75,11 @@ void Game::manageGod() {
bool touched = false; bool touched = false;
// check if OOB (Out Of Bounds) // check if OOB (Out Of Bounds)
if (invaderPos.getY() >= pm.getScreenWidth() && if (invaderPos.getY()+confData.invadersSize >= pm.getScreenWidth() ||
(invaderPos.getX() < 0 || invaderPos.getX() + confData.invadersSize >= pm.getScreenWidth())) { (invaderPos.getX() < 0 || invaderPos.getX() + confData.invadersSize >= pm.getScreenWidth())) {
touched = true; touched = true;
// check player collision // check player collision
} else if (invaderPos.getY() + confData.invadersSize >= pm.getScreenWidth() - PLAYER_HEIGHT) { } else if (invaderPos.getY() + confData.invadersSize >= pm.getScreenHeight() - PLAYER_HEIGHT) {
for (Player &p: players) { for (Player &p: players) {
if (areLinesColliding( if (areLinesColliding(
p.x, p.x + confData.playersWidth, p.x, p.x + confData.playersWidth,
@ -104,6 +104,6 @@ void Game::manageGod() {
} }
} }
Position God::getLeftHandPos(unsigned screenWidth) const { Position God::getRightHandPos(unsigned screenWidth) const {
return Position(screenWidth - GOD_HAND_DISTANCE - GOD_HAND_SIZE, GOD_HAND_SIZE); return Position(screenWidth - GOD_HAND_DISTANCE - GOD_HAND_SIZE, 0);
} }