Skip to content

Instantly share code, notes, and snippets.

View PoetaKodu's full-sized avatar

Paweł Syska PoetaKodu

View GitHub Profile
sf::Clock GameClock;
// Pierwszy pomiar zostanie zakonczony dopiero na koncu pierwszej klatki.
// Na początku zakładamy, że czas klatki to idealnie 1 / 60 sekundy (60 FPS)
float DeltaTime = 1 / 60.f;
while(...)
{
float frameStartTime = GameClock.getElapsedTime().asSeconds();
// Kod pętli głównej...
void CGame::Run() // Glowny kod gry.
{
/* Pamiętamy żeby ustawić odpowiedni status aplikacji. */
m_status = Status::Running;
/* Ciemnoszary kolor. */
sf::Color bgColor(30, 30, 30);
/* By prawidłowo uaktualniać scenę potrzebujemy czasu klatki. */
sf::Clock GameClock;
/* W DeltaTime przechowujemy czas klatki. */
float DeltaTime = 1 / 60.f;
class CPlayer
: public IPawn
{
sf::Sprite m_sprite;
public:
CPlayer();
virtual void SetLocation(const grim::Vector2 &location) override;
virtual void Draw() override;
#include "Pawn.hpp" // Klasa dziedziczy po pionku, wiec pamietamy by dodac plik naglowkowy
// Klasa gracza
class CPlayer
: public IPawn
{
sf::Sprite m_sprite; // Potrzebujemy sprita by wyswietlac naszego gracza
public:
CPlayer(); // Konstruktor
#include "..\Include\Player.hpp"
#include "..\Include\Game.hpp" // Potrzebujemy klasy gry bo w niej znajduje sie okno, na ktorym bedziemy wyswietlac gracza.
#include "..\Include\TextureManager.hpp" // Potrzebujemy texture menedzera by dostac teksture
////////////////////////////////////////////////////////
CPlayer::CPlayer() // Konstruktor klasy
: IPawn(new CPlayerController) // klasa bazowa IPawn pobiera wskaznik na kontroler, ktory sami musimy sobie utworzyc.
{
/* Tutaj przeprowadzimy sobie konfiguracje naszego gracza.
#include "Pawn.hpp" // Klasa przeciwnika dziedziczy po pionku. Dodajemy go.
/* Tworzymy klase pionka podobnie jak klase gracza
z ta roznica, ze jej kontroler poki co nic nie bedzie robil.
Zachowaniem wroga zajmiemy sie pozniej.
*/
class CEnemy
: public IPawn
{
sf::Sprite m_sprite; // Tworzymy sprajta do wyswietlania wroga
#include "..\Include\Enemy.hpp"
#include "..\Include\Game.hpp" // Klasa gry potrzebna do wyswietlenia wroga.
#include "..\Include\TextureManager.hpp" // Klasa menedzera tekstur do ich pobrania.
////////////////////////////////////////////////////////
CEnemy::CEnemy()
: IPawn(new CEnemyAIController) // Tak jak w klasie gracza wywolujemy konstruktor klasy bazowej z wlasnym kontrolerem AI.
{
/* Aby zobaczyc pelne wytlumaczenie ponizszego kodu przejdz do kontruktora klasy CPlayer
// Konstruktor klasy CGame (Game.hpp)
// Tekstury beda dostepne do pobrania w linku na koncu artykulu.
CTextureManager::Load("Player_Stand_01", "Data/Textures/BlueMage/Mage_Stand_01.png");
CTextureManager::Load("Enemy_Stand_01", "Data/Textures/OrangeMage/Mage_Stand_01.png");
/////////////////////////////////////////////////////////
void CGame::Run() // Glowny kod gry.
{
/* Pamiętamy żeby ustawić odpowiedni status aplikacji. */
m_status = Status::Running;
auto player = new CPlayer();
/* Btw. taki zapis to skrot od player->SetLocation(grim::Vector2(400,300));
Kompilator powinien sie domyslic o co chodzi.
*/
#include "Actor.hpp" // Klasa bedzie operowala na aktorach ze sceny.
#include "Pawn.hpp" // Potrzebna bedzie tez klasa pionka
// Klasa bazowa dla wszelkich zmyslow.
class IAISense
{
protected:
IPawn &m_owner; // Wlasciciel tego konkretnego zmyslu.
public:
/* Jest to konstruktor klasy zmyslu.