Exemple #1
0
void mousePassive(int x, int y)
{
	float *objectCoords = getRayFromMouse(x, y);
	float posXs = *objectCoords;
	float posYs = *(++objectCoords);
	float posZs = *(++objectCoords);
	float posXe = *(++objectCoords);
	float posYe = *(++objectCoords);
	float posZe = *(++objectCoords);
	if (hoverCard == nullptr || !hoverCard->collidesWithRay(posXs, posYs, posZs, posXe, posYe, posZe)) {
		hoverCard = nullptr;
		position_hand(player.hand);
		for (auto &it : player.hand) {
			if (it.second.collidesWithRay(posXs, posYs, posZs, posXe, posYe, posZe)) {
				hoverCard = &it.second;
				hoverID = it.first;
			}
		}
		for (auto &it : player.in_play) {
			if (it.second.collidesWithRay(posXs, posYs, posZs, posXe, posYe, posZe)) {
				hoverCard = &it.second;
				hoverID = it.first;
			}
		}
		position_hand(player.hand);
		glutPostRedisplay();
	}
	//std::cout << std::to_string(posX) + " " + std::to_string(posY)+ " " + std::to_string(posZ) << std::endl;
}
 void put_down_one() {
   Servos s;
   lower_hand();
   nap();
   open_hand();
   position_hand(10);
   close_hand();
 }
Exemple #3
0
void mouseClick(int button, int state, int x, int y) 
{
	float *objectCoords = getRayFromMouse(x, y);
	float posXs = *objectCoords;
	float posYs = *(++objectCoords);
	float posZs = *(++objectCoords);
	float posXe = *(++objectCoords);
	float posYe = *(++objectCoords);
	float posZe = *(++objectCoords);

	if (button == GLUT_LEFT_BUTTON) {
		// button release
		if (state == GLUT_UP) {
			if (gameData.get_game_state() == CHAT_SCREEN) {
				if (x > 100 && y > 510 && x < 220 && y < 550) {
					messages.push_back("...ready...");
					glutPostRedisplay();
					send_ready();
					gameData.toggle_player_ready();
				}
			}
			else if (gameData.get_game_state() == GAME) {
				if (cardGrabbed) {
					if (hoverCard->getY() > -0.35f)
						play_card(hoverID);
					cardGrabbed = false;
				}
				else if (attack_drag) { //&& hoverCard != attackingCard // some allowance for click-and-move?
					// check attack ...
					if (hoverCard != nullptr && hoverCard->isAttackable()) {
						// attack.
						send_attack(attackerID, hoverID);
						gameData.setup_attack(attackerID, hoverID);
						gameData.queue_action(&attack);
					}
					attack_drag = false;
					for (auto &it : opponent.in_play) {
						it.second.set_attackable(false);
					}
				}
				position_hand(player.hand);
				movX = 0;
				movY = 0;
				arrow_head_x = 0;
				arrow_head_y = 0;
			}
		}
		else if (state == GLUT_DOWN) {
			if (gameData.get_game_state() == GAME) {
				if (gameData.is_my_turn() && hoverCard == nullptr) {
					float t = (0.0f - posZs) / (posZe - posZs);
					float x = posXs + t*(posXe - posXs);
					float y = posYs + t*(posYe - posYs);
					if (x > 1.7f && y > 0.0f && x < 2.0f && y < 0.15f) {
						gameData.queue_action(&end_turn);
					}
				}
				if (gameData.is_my_turn() && hoverCard != nullptr) {
					if (player.hand.find(hoverID) != player.hand.end() &&
						hoverCard->getCard().getCost() <= gameData.get_energy_player().get_current()) {
						cardGrabbed = true;
					}
					else if (player.in_play.find(hoverID) != player.in_play.end() && hoverCard->getCard().can_attack()) {
						attackingCard = hoverCard;
						attackerID = hoverID;
						attack_drag = true;
						arrow_head_x = hoverCard->getX() + 0.075f;
						arrow_head_y = hoverCard->getY() + 0.15f;
						bool taunt_present = false;
						for (auto &it : opponent.in_play) {   // Highlighting creatures that can be attacked.
														// Problem -> visual feedback on which one you're choosing.
							if (it.second.getCard().getStatus() & STATUS_TAUNT) {
								it.second.set_attackable(true);
								taunt_present = true;
							}
						}
						for (auto &it : opponent.in_play) {
							if (!(it.second.getCard().getStatus() & STATUS_TAUNT)) {
								if (!taunt_present) {
									it.second.set_attackable(true);
								}
								else {
									it.second.set_attackable(false);
								}
							}
						}
					}
				}
			}
		}
	}
	glutPostRedisplay();
}