Esempio n. 1
0
void updateGameScene(GameScene &scene, float elapsedTime)
{
    if (scene.gameState == GameState::Playing)
    {
        updatePackman(scene.packman, elapsedTime, scene.field);

        // Контейнер std::map при обходе с range-based for
        //  последовательно возвращает пары (ключ, значение),
        //  упакованные в контейнер std::pair.
        // pair имеет тип `std::pair<const GhostId, Ghost> &`
        for (auto &pair : scene.ghosts)
        {
            updateGhost(pair.second, elapsedTime, scene.field);
        }

        // Проверяем условие поражения - столкновение пакмана и призрака.
        const sf::FloatRect packmanBounds = getPackmanBounds(scene.packman);
        for (const auto &pair : scene.ghosts)
        {
            if (getGhostBounds(pair.second).intersects(packmanBounds))
            {
                updateGameOverLabel(scene.gameOverLabel, "Game Over! You lose.");
                scene.gameState = GameState::PlayerLosed;
            }
        }

        // Проверяем условие победы - всё печенье съедено.
        if (getRemainingCookies(scene) == 0)
        {
            updateGameOverLabel(scene.gameOverLabel, "Congratulations, you won!");
            scene.gameState = GameState::PlayerWon;
        }
    }
}
void ShiftTraceTool::leftButtonUp(const TPointD &pos, const TMouseEvent &) {
  if (CurveP0Gadget <= m_gadget && m_gadget <= CurvePmGadget) {
    if (m_curveStatus == TwoPointsCurve) {
      m_p2          = (m_p0 + m_p1) * 0.5;
      m_curveStatus = ThreePointsCurve;
      updateCurveAffs();
      updateGhost();

      m_center[0] = (m_aff[0] * m_dpiAff).inv() * m_p2;
      m_center[1] = (m_aff[1] * m_dpiAff).inv() * m_p2;
    }
  }
  m_gadget = NoGadget;
  invalidate();
}
void ShiftTraceTool::leftButtonDrag(const TPointD &pos, const TMouseEvent &)
{

	if (m_gadget == NoGadget) {
		if (norm(pos - m_oldPos) > 10 * getPixelSize()) {
			m_curveStatus = TwoPointsCurve;
			m_p0 = m_oldPos;
			m_gadget = CurveP1Gadget;
		}
	}

	if (isCurveGadget(m_gadget)) {
		if (m_gadget == CurveP0Gadget)
			m_p0 = pos;
		else if (m_gadget == CurveP1Gadget)
			m_p1 = pos;
		else
			m_p2 = pos;
		updateCurveAffs();
	} else if (m_gadget == RotateGadget) {
		TAffine aff = getGhostAff();
		TPointD c = aff * m_center[m_ghostIndex];
		TPointD a = m_oldPos - c;
		TPointD b = pos - c;
		m_oldPos = pos;
		TPointD u = normalize(a);
		double phi = atan2(-u.y * b.x + u.x * b.y, u.x * b.x + u.y * b.y) * 180.0 / 3.14153;

		TPointD imgC = aff * m_center[m_ghostIndex];

		m_aff[m_ghostIndex] = TRotation(imgC, phi) * m_aff[m_ghostIndex];
	} else if (m_gadget == MoveCenterGadget) {
		TAffine aff = getGhostAff().inv();
		TPointD delta = aff * pos - aff * m_oldPos;
		m_oldPos = pos;
		m_center[m_ghostIndex] += delta;
	} else if (m_gadget == TranslateGadget) {
		TPointD delta = pos - m_oldPos;
		m_oldPos = pos;
		m_aff[m_ghostIndex] = TTranslation(delta) * m_aff[m_ghostIndex];
	}

	updateGhost();
	invalidate();
}
Esempio n. 4
0
bool CameraViewUpdate()
{
	if (viewFightInitRequired())
		initFightView();

	bool ghostAvailable = getGameState()->getGhost() != NULL;

	// Clear the screen
    IwGxClear(IW_GX_COLOUR_BUFFER_F | IW_GX_DEPTH_BUFFER_F);

	if (ghostAvailable && 
		(!gameIsHalt() || getGameState()->getGhost()->isDead())) {
		updateGhost();
	}

	renderCamera();
	setupPlayer();
	if (ghostAvailable)
		renderGhost();
	playerAttackView->Render();

	playerHit->Render();

	manaBar->Render();
	cameraDefend->Update();
	cameraDefend->Render();

	tutorialView->Render();

	IwGxFlush();
    IwGxSwapBuffers();

	IwGxTickUpdate();

	return true;
}
Esempio n. 5
0
void initFightView() {
	GhostType ghostType = getGameState()->getGhost()->getGhostType();

	if (ghostType == GhostType::VIKING) {
		ghost_Model = ghostStore_Model[0];
		ghostCollision = ghostStoreCollision[0];
		for (int i = 0; i < 5; i++) {
			ghost_Anims[i] = ghostStore_Anims[0][i];
		}
		ghost_Skel = ghostStore_Skel[0];
		ghost_Skin = ghostStore_Skin[0];
	} else if (ghostType == GhostType::SKELMAN) {
		ghost_Model = ghostStore_Model[1];
		ghostCollision = ghostStoreCollision[1];
		for (int i = 0; i < 5; i++) {
			ghost_Anims[i] = ghostStore_Anims[1][i];
		}
		ghost_Skel = ghostStore_Skel[1];
		ghost_Skin = ghostStore_Skin[1];
	}

	if (ghostMatrix)
		delete ghostMatrix;
	if (ghost_Player)
		delete ghost_Player;
	
	ghostMatrix = new CIwFMat();
	ghostCollision->init(ghostMatrix, ghostType);
	
    ghost_Player = new CIwAnimPlayer;
    ghost_Player->SetSkel(ghost_Skel);

	// Reset animation
	ghost_Player->PlayAnim(ghost_Anims[GHOST_ANIM_IDLE], 1, CIwAnimBlendSource::LOOPING_F, 0);
	updateGhost();
}