Zad3 - wip1
This commit is contained in:
parent
86de1db6cb
commit
9674806687
@ -169,6 +169,7 @@
|
||||
<ClCompile Include="KRect.cpp" />
|
||||
<ClCompile Include="KCollider.cpp" />
|
||||
<ClCompile Include="KRectPawn.cpp" />
|
||||
<ClCompile Include="KSettings.cpp" />
|
||||
<ClCompile Include="KTexture.cpp" />
|
||||
<ClCompile Include="KWall.cpp" />
|
||||
<ClCompile Include="Main.cpp" />
|
||||
@ -199,6 +200,7 @@
|
||||
<ClInclude Include="KRect.h" />
|
||||
<ClInclude Include="KCollider.h" />
|
||||
<ClInclude Include="KRectPawn.h" />
|
||||
<ClInclude Include="KSettings.h" />
|
||||
<ClInclude Include="KTexture.h" />
|
||||
<ClInclude Include="KWall.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
|
@ -66,9 +66,13 @@
|
||||
<ClCompile Include="KFont.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="KSettings.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="vcpkg.json" />
|
||||
<None Include="config.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Utils.h">
|
||||
@ -140,10 +144,39 @@
|
||||
<ClInclude Include="resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="KSettings.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="2dgk_zad3.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="assets\textures\arrow.bmp">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="assets\textures\exit.bmp">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="assets\textures\P1.bmp">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="assets\textures\P2.bmp">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="assets\textures\wall.bmp">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Font Include="assets\fonts\Roboto-Thin.ttf" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="assets\fonts\LICENSE.txt" />
|
||||
<Text Include="assets\levels\level1.txt" />
|
||||
<Text Include="assets\levels\level2.txt" />
|
||||
<Text Include="assets\levels\level3.txt" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,7 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
namespace KapitanGame {
|
||||
namespace Constants {
|
||||
constexpr const char* WINDOW_TITLE = "2DGK - Zadanie 2 (Lab 7-8)";
|
||||
constexpr const char* WINDOW_TITLE = "2DGK - Zadanie 3 (Lab 11-12)";
|
||||
//Analog joystick dead zone
|
||||
constexpr int JOYSTICK_DEAD_ZONE = 8000;
|
||||
//Screen dimension constants
|
||||
@ -13,8 +14,9 @@ namespace KapitanGame {
|
||||
constexpr int TILE_HEIGHT = 32;
|
||||
constexpr float SPEED = 200.f;
|
||||
constexpr float SMOOTH = 0.4f;
|
||||
constexpr float JUMP_SPEED = 200.f;
|
||||
constexpr float JUMP_SHORT_SPEED = 100.f;
|
||||
constexpr float GRAVITY = 200.f;
|
||||
constexpr float JUMP_SPEED = 300.f;
|
||||
constexpr float GRAVITY = 450.f;
|
||||
constexpr float MAX_JUMP_VELOCITY = 1000.f;
|
||||
constexpr float MAX_GRAVITY = 1000.f;
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ namespace KapitanGame
|
||||
void KCamera::SetDebug(const SDL_FRect& map)
|
||||
{
|
||||
Viewport = { 0,0,Constants::SCREEN_WIDTH, Constants::SCREEN_HEIGHT };
|
||||
Scale = Constants::SCREEN_RATIO > 1.f ? Constants::SCREEN_HEIGHT * 1.f / map.h : Constants::SCREEN_WIDTH * 1.f / map.w;
|
||||
Scale = std::min(Constants::SCREEN_HEIGHT * 1.f / map.h, Constants::SCREEN_WIDTH * 1.f / map.w);
|
||||
}
|
||||
|
||||
const SDL_FRect& KCamera::GetPlayArea() const
|
||||
|
@ -3,7 +3,7 @@
|
||||
namespace KapitanGame
|
||||
{
|
||||
KCirclePawn::KCirclePawn(const KVector2D& position, const KTexture& texture,
|
||||
const std::shared_ptr<KPlayerController>& playerController) : KPawn(position, texture, playerController),
|
||||
const std::shared_ptr<KPlayerController>& playerController, KSettings* settings) : KPawn(position, texture, playerController, settings),
|
||||
Collider(this, static_cast<float>(texture.GetWidth())/2.0f)
|
||||
{
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ namespace KapitanGame
|
||||
{
|
||||
public:
|
||||
KCirclePawn(const KVector2D& position, const KTexture& texture,
|
||||
const std::shared_ptr<KPlayerController>& playerController);
|
||||
const std::shared_ptr<KPlayerController>& playerController, KSettings* settings);
|
||||
|
||||
const KCollider* GetCollider() const override;
|
||||
private:
|
||||
|
@ -48,7 +48,7 @@ namespace KapitanGame
|
||||
KTexture KFont::GetTextTexture(const std::string& text, const SDL_Color textColor, SDL_Renderer* renderer) const
|
||||
{
|
||||
KTexture texture;
|
||||
SDL_Surface* textSurface = TTF_RenderText_Blended(Font, text.c_str(), textColor);
|
||||
SDL_Surface* textSurface = TTF_RenderText_Solid(Font, text.c_str(), textColor);
|
||||
if (textSurface == nullptr)
|
||||
{
|
||||
printf("Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError());
|
||||
|
@ -29,6 +29,12 @@ namespace KapitanGame {
|
||||
{
|
||||
throw std::runtime_error(Utils::StringFormat("SDL could not initialize! SDL_Error: %s", SDL_GetError()));
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
|
||||
#endif
|
||||
|
||||
|
||||
//Set texture filtering to linear
|
||||
if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1"))
|
||||
{
|
||||
@ -58,6 +64,7 @@ namespace KapitanGame {
|
||||
}
|
||||
//Initialize renderer color
|
||||
SDL_SetRenderDrawColor(Renderer, 0, 0xFF, 0, 0xFF);
|
||||
SDL_Log("KGame initialized...");
|
||||
}
|
||||
|
||||
KGame::~KGame() {
|
||||
@ -84,8 +91,8 @@ namespace KapitanGame {
|
||||
{
|
||||
bool success = true;
|
||||
Objects.clear();
|
||||
FreePositions.clear();
|
||||
/*std::ifstream levelFile;
|
||||
Pawns.clear();
|
||||
std::ifstream levelFile;
|
||||
levelFile.open("assets/levels/level" + std::to_string(LvlCounter) + ".txt");
|
||||
if (levelFile.fail())
|
||||
{
|
||||
@ -96,6 +103,7 @@ namespace KapitanGame {
|
||||
{
|
||||
int y = 0;
|
||||
float mapWidth = 0;
|
||||
KVector2D startPosition{ 0.f, 0.f };
|
||||
std::string line;
|
||||
while (std::getline(levelFile, line)) {
|
||||
if (mapWidth < static_cast<float>(line.length() * Constants::TILE_WIDTH))
|
||||
@ -107,8 +115,8 @@ namespace KapitanGame {
|
||||
case '#':
|
||||
Objects.emplace(std::make_pair(static_cast<int>(i), y), std::make_shared<KWall>(position, Textures["wall.bmp"]));
|
||||
break;
|
||||
case ' ':
|
||||
FreePositions.emplace_back(position);
|
||||
case 'P':
|
||||
startPosition = position;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -119,18 +127,11 @@ namespace KapitanGame {
|
||||
const auto mapHeight = static_cast<float>(y * Constants::TILE_HEIGHT);
|
||||
levelFile.close();
|
||||
Map = { 0,0,mapWidth,mapHeight };
|
||||
}*/
|
||||
Map = { 0,0,Constants::SCREEN_WIDTH,Constants::SCREEN_HEIGHT };
|
||||
return success;
|
||||
}
|
||||
|
||||
void KGame::LoadPlayerPawn()
|
||||
{
|
||||
Pawns.clear();
|
||||
KVector2D StartPosition{ 0.f, 0.f };
|
||||
Pawns.emplace_back(std::make_shared<KCirclePawn>(StartPosition, Textures["P1.bmp"], PlayerControllers[static_cast<int>(KPlayer::Player1)]));
|
||||
Pawns.emplace_back(std::make_shared<KCirclePawn>(startPosition, Textures["P1.bmp"], PlayerControllers[static_cast<int>(KPlayer::Player1)], &Settings));
|
||||
PlayerControllers[static_cast<int>(KPlayer::Player1)]->Possess(Pawns.back().get());
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
bool KGame::LoadMedia()
|
||||
{
|
||||
@ -161,7 +162,7 @@ namespace KapitanGame {
|
||||
}
|
||||
|
||||
Fonts.emplace("PressStart2P-Regular", KFont());
|
||||
if (!Fonts["PressStart2P-Regular"].LoadFromFile("assets/fonts/PressStart2P-Regular.ttf", 72))
|
||||
if (!Fonts["PressStart2P-Regular"].LoadFromFile("assets/fonts/PressStart2P-Regular.ttf", 8))
|
||||
{
|
||||
printf("Failed to load PressStart2P-Regular font!\n");
|
||||
Fonts.erase("PressStart2P-Regular");
|
||||
@ -213,11 +214,13 @@ namespace KapitanGame {
|
||||
KCamera debugCamera(Map);
|
||||
debugCamera.SetDebug(Map);
|
||||
|
||||
bool debug = false;
|
||||
char devMode = 0;
|
||||
|
||||
LoadPlayerPawn();
|
||||
camera.Update(Pawns, Map);
|
||||
|
||||
VelocityTextureDirty = true;
|
||||
GravityTextureDirty = true;
|
||||
|
||||
Time = PreviousTime = SDL_GetTicks();
|
||||
printf("\n");
|
||||
|
||||
@ -246,12 +249,39 @@ namespace KapitanGame {
|
||||
|
||||
if (Input.IsKeyboardButtonPressed(SDL_SCANCODE_F1))
|
||||
{
|
||||
debug = !debug;
|
||||
if (++devMode > 2) devMode = 0;
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "Changed devMode to %d\n", devMode);
|
||||
}
|
||||
if (devMode >= 1) {
|
||||
if (Input.IsKeyboardButtonPressed(SDL_SCANCODE_F2))
|
||||
{
|
||||
CollisionEnabled = !CollisionEnabled;
|
||||
}
|
||||
if (Input.IsKeyboardButtonHeld(SDL_SCANCODE_F3))
|
||||
{
|
||||
Settings.JumpVelocity -= 0.1f;
|
||||
if (Settings.JumpVelocity < 0) Settings.JumpVelocity = 0;
|
||||
VelocityTextureDirty = true;
|
||||
}
|
||||
if (Input.IsKeyboardButtonHeld(SDL_SCANCODE_F4))
|
||||
{
|
||||
Settings.JumpVelocity += 0.1f;
|
||||
if (Settings.JumpVelocity > Constants::MAX_JUMP_VELOCITY) Settings.JumpVelocity = Constants::MAX_JUMP_VELOCITY;
|
||||
VelocityTextureDirty = true;
|
||||
}
|
||||
if (Input.IsKeyboardButtonHeld(SDL_SCANCODE_F5))
|
||||
{
|
||||
Settings.Gravity -= 0.1f;
|
||||
if (Settings.Gravity < 0) Settings.Gravity = 0;
|
||||
GravityTextureDirty = true;
|
||||
}
|
||||
if (Input.IsKeyboardButtonHeld(SDL_SCANCODE_F6))
|
||||
{
|
||||
Settings.Gravity += 0.1f;
|
||||
if (Settings.Gravity > Constants::MAX_GRAVITY) Settings.Gravity = Constants::MAX_GRAVITY;
|
||||
GravityTextureDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (Playing) {
|
||||
for (const auto& pc : PlayerControllers) {
|
||||
@ -279,13 +309,21 @@ namespace KapitanGame {
|
||||
camera.Update(Pawns, Map);
|
||||
|
||||
}
|
||||
if (VelocityTextureDirty) {
|
||||
Textures.insert_or_assign("Text_Velocity", Fonts["PressStart2P-Regular"].GetTextTexture(Utils::StringFormat("Velocity: %f", Settings.JumpVelocity), { 0,0,0,0xFF }, Renderer));
|
||||
VelocityTextureDirty = false;
|
||||
}
|
||||
if (GravityTextureDirty) {
|
||||
Textures.insert_or_assign("Text_Gravity", Fonts["PressStart2P-Regular"].GetTextTexture(Utils::StringFormat("Gravity: %f", Settings.Gravity), { 0,0,0,0xFF }, Renderer));
|
||||
GravityTextureDirty = false;
|
||||
}
|
||||
|
||||
|
||||
if (!Playing)
|
||||
{
|
||||
if (Time > RestartTick)
|
||||
{
|
||||
LoadLevel();
|
||||
LoadPlayerPawn();
|
||||
debugCamera.SetDebug(Map);
|
||||
camera.Update(Pawns, Map);
|
||||
if (ShowWinner)
|
||||
@ -308,12 +346,12 @@ namespace KapitanGame {
|
||||
SDL_SetRenderDrawColor(Renderer, 66, 135, 245, 0xFF);
|
||||
SDL_RenderClear(Renderer);
|
||||
|
||||
const auto& cameraInUse = debug ? debugCamera : camera;
|
||||
const auto& cameraInUse = devMode >= 2 ? debugCamera : camera;
|
||||
|
||||
|
||||
if (Playing) {
|
||||
for (const auto& object : Objects)
|
||||
object.second->Render(Renderer, cameraInUse);
|
||||
for (const auto& [tile, obj] : Objects)
|
||||
obj->Render(Renderer, cameraInUse);
|
||||
for (const auto& pawn : Pawns) {
|
||||
pawn->Render(Renderer, cameraInUse);
|
||||
}
|
||||
@ -329,8 +367,12 @@ namespace KapitanGame {
|
||||
Textures["Text_Winner"].Render(Renderer, Constants::SCREEN_WIDTH / 2.f - Textures["Text_Winner"].GetWidth() / 2.f, 25.f);
|
||||
}
|
||||
|
||||
Textures["Text_Score"].Render(Renderer, Constants::SCREEN_WIDTH / 2.f - Textures["Text_Score"].GetWidth() / 2.f, Constants::SCREEN_HEIGHT - 10.f - Textures["Text_Score"].GetHeight());
|
||||
if (debug)
|
||||
//Textures["Text_Score"].Render(Renderer, Constants::SCREEN_WIDTH / 2.f - Textures["Text_Score"].GetWidth() / 2.f, Constants::SCREEN_HEIGHT - 10.f - Textures["Text_Score"].GetHeight());
|
||||
if (devMode >= 1) {
|
||||
Textures["Text_Velocity"].Render(Renderer, 10.f, 25.f);
|
||||
Textures["Text_Gravity"].Render(Renderer, 10.f, 30.f + Textures["Text_Velocity"].GetHeight());
|
||||
}
|
||||
if (devMode >= 2)
|
||||
{
|
||||
SDL_SetRenderDrawColor(Renderer, 0x00, 0x00, 0x00, 0xFF);
|
||||
SDL_RenderDrawLineF(Renderer, 0, Constants::SCREEN_HEIGHT / 2.f, Constants::SCREEN_WIDTH, Constants::SCREEN_HEIGHT / 2.f);
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "KFont.h"
|
||||
#include "KInput.h"
|
||||
#include "KSettings.h"
|
||||
#include "Utils.h"
|
||||
|
||||
|
||||
@ -35,7 +36,6 @@ namespace KapitanGame {
|
||||
std::vector<std::shared_ptr<KPlayerController>> PlayerControllers;
|
||||
std::unordered_map<std::string, KTexture> Textures;
|
||||
std::unordered_map<std::string, KFont> Fonts;
|
||||
std::vector<KVector2D> FreePositions;
|
||||
KInput Input;
|
||||
uint32_t Time;
|
||||
uint32_t PreviousTime;
|
||||
@ -43,9 +43,11 @@ namespace KapitanGame {
|
||||
bool CollisionEnabled = true;
|
||||
bool ShowWinner = false;
|
||||
std::weak_ptr<KObject> Exit;
|
||||
KSettings Settings;
|
||||
bool VelocityTextureDirty;
|
||||
bool GravityTextureDirty;
|
||||
|
||||
bool LoadLevel();
|
||||
void LoadPlayerPawn();
|
||||
bool LoadMedia();
|
||||
|
||||
int LvlCounter = 1;
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
#include <memory>
|
||||
#include <typeinfo>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "Constants.h"
|
||||
#include "KPlayerController.h"
|
||||
#include "KExit.h"
|
||||
#include "KSettings.h"
|
||||
|
||||
namespace KapitanGame
|
||||
{
|
||||
@ -19,8 +19,9 @@ namespace KapitanGame
|
||||
|
||||
for (const auto& [oX, oY] : std::initializer_list<std::pair<int, int>>{ {0, 0}, {-1,0}, {1,0}, {0,-1}, {0,1}, {-1,-1}, {1,1}, {1,-1}, {-1,1} })
|
||||
{
|
||||
try {
|
||||
const auto& other = objects.at({ xPos + oX, yPos + oY });
|
||||
auto it = objects.find({ xPos + oX, yPos + oY });
|
||||
if (it == objects.end()) continue;
|
||||
const auto& other = it->second;
|
||||
if (other->GetCollider() == nullptr) continue;
|
||||
if (other->Id == Id) continue;
|
||||
if (GetCollider()->IsCollision(other->GetCollider())) {
|
||||
@ -33,24 +34,27 @@ namespace KapitanGame
|
||||
const auto separationVector = GetCollider()->GetSeparationVector(other->GetCollider());
|
||||
|
||||
Position += separationVector;
|
||||
if (separationVector.Y < 0)
|
||||
if (GetPosition().Y - GetCollider()->GetHeight() / 2.f >= other->GetPosition().Y + other->GetCollider()->GetHeight() / 2.f)
|
||||
{
|
||||
Velocity.Y = 0;
|
||||
Grounded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::out_of_range&)
|
||||
if (GetPosition().Y + GetCollider()->GetHeight() / 2.f <= other->GetPosition().Y - other->GetCollider()->GetHeight() / 2.f)
|
||||
{
|
||||
Velocity.Y = 0;
|
||||
CanJump = true;
|
||||
CanDoubleJump = true;
|
||||
HasJumped = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KPawn::MovementStep(const float& timeStep)
|
||||
{
|
||||
const float gravityScale = Velocity.Y > 0.f ? 3.f : 1.f;
|
||||
Position.X += Velocity.X * timeStep;
|
||||
Position.Y += Velocity.Y * timeStep + 1.f / 2.f * Constants::GRAVITY * timeStep * timeStep;
|
||||
Velocity.Y += Constants::GRAVITY * timeStep;
|
||||
Position.Y += Velocity.Y * timeStep + 1.f / 2.f * gravityScale * Settings->Gravity * timeStep * timeStep;
|
||||
Velocity.Y += gravityScale * Settings->Gravity * timeStep;
|
||||
}
|
||||
|
||||
void KPawn::CollisionDetectionWithMapStep(const SDL_FRect& map)
|
||||
@ -60,7 +64,9 @@ namespace KapitanGame
|
||||
if (separationVector.Y < 0)
|
||||
{
|
||||
Velocity.Y = 0;
|
||||
Grounded = true;
|
||||
CanJump = true;
|
||||
CanDoubleJump = true;
|
||||
HasJumped = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,16 +76,26 @@ namespace KapitanGame
|
||||
}
|
||||
|
||||
void KPawn::StopJump() {
|
||||
if (!Grounded) {
|
||||
if (Velocity.Y < -Constants::JUMP_SHORT_SPEED)
|
||||
Velocity.Y = -Constants::JUMP_SHORT_SPEED;
|
||||
if (!CanJump) {
|
||||
if (Velocity.Y < -Settings->ShortJumpVelocity())
|
||||
Velocity.Y = -Settings->ShortJumpVelocity();
|
||||
}
|
||||
}
|
||||
|
||||
void KPawn::StartJump() {
|
||||
if (Grounded) {
|
||||
Grounded = false;
|
||||
Velocity.Y = -Constants::JUMP_SPEED;
|
||||
if (Velocity.Y != 0.f)
|
||||
{
|
||||
CanJump = false;
|
||||
}
|
||||
if (CanJump) {
|
||||
CanJump = false;
|
||||
HasJumped = true;
|
||||
Velocity.Y = -Settings->JumpVelocity;
|
||||
}
|
||||
else if (HasJumped && CanDoubleJump)
|
||||
{
|
||||
CanDoubleJump = false;
|
||||
Velocity.Y = -Settings->JumpVelocity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,17 +7,19 @@
|
||||
|
||||
namespace KapitanGame
|
||||
{
|
||||
struct KSettings;
|
||||
class KPlayerController;
|
||||
|
||||
class KPawn : public KObject
|
||||
{
|
||||
public:
|
||||
KPawn(const KVector2D& position, const KTexture& texture,
|
||||
const std::shared_ptr<KPlayerController>& playerController)
|
||||
const std::shared_ptr<KPlayerController>& playerController, KSettings* settings)
|
||||
: KObject(position, texture),
|
||||
PlayerController(playerController)
|
||||
PlayerController(playerController), CanJump(false), CanDoubleJump(false), HasJumped(true), Settings(settings)
|
||||
{
|
||||
}
|
||||
|
||||
void CollisionDetectionStep(const std::unordered_map<std::pair<int, int>, std::shared_ptr<KObject>, Utils::PairHash>& objects);
|
||||
void MovementStep(const float& timeStep);
|
||||
void CollisionDetectionWithMapStep(const SDL_FRect& map);
|
||||
@ -27,7 +29,10 @@ namespace KapitanGame
|
||||
private:
|
||||
const std::weak_ptr<KPlayerController> PlayerController;
|
||||
KVector2D Velocity{ 0.f, 0.f };
|
||||
bool Grounded;
|
||||
bool CanJump;
|
||||
bool CanDoubleJump;
|
||||
bool HasJumped;
|
||||
KSettings* Settings;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
namespace KapitanGame
|
||||
{
|
||||
KRectPawn::KRectPawn(const KVector2D& position, const KTexture& texture,
|
||||
const std::shared_ptr<KPlayerController>& playerController) : KPawn(position, texture, playerController),
|
||||
const std::shared_ptr<KPlayerController>& playerController, KSettings* settings) : KPawn(position, texture, playerController, settings),
|
||||
Collider(this, texture.GetWidth(), texture.GetHeight())
|
||||
{
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ namespace KapitanGame
|
||||
{
|
||||
public:
|
||||
KRectPawn(const KVector2D& position, const KTexture& texture,
|
||||
const std::shared_ptr<KPlayerController>& playerController);
|
||||
const std::shared_ptr<KPlayerController>& playerController, KSettings* settings);
|
||||
|
||||
const KCollider* GetCollider() const override;
|
||||
private:
|
||||
|
9
2dgk_zad3/2dgk_zad3/KSettings.cpp
Normal file
9
2dgk_zad3/2dgk_zad3/KSettings.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include "KSettings.h"
|
||||
|
||||
namespace KapitanGame
|
||||
{
|
||||
float KSettings::ShortJumpVelocity() const
|
||||
{
|
||||
return JumpVelocity / 2.f;
|
||||
}
|
||||
}
|
14
2dgk_zad3/2dgk_zad3/KSettings.h
Normal file
14
2dgk_zad3/2dgk_zad3/KSettings.h
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
#include "Constants.h"
|
||||
|
||||
namespace KapitanGame
|
||||
{
|
||||
struct KSettings
|
||||
{
|
||||
float Gravity = Constants::GRAVITY;
|
||||
float JumpVelocity = Constants::JUMP_SPEED;
|
||||
|
||||
[[nodiscard]] float ShortJumpVelocity() const;
|
||||
};
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ namespace KapitanGame {
|
||||
KTexture& KTexture::operator=(KTexture&& other) noexcept {
|
||||
if (this == &other)
|
||||
return *this;
|
||||
Free();
|
||||
Texture = other.Texture;
|
||||
Width = other.Width;
|
||||
Height = other.Height;
|
||||
|
@ -1,33 +1,15 @@
|
||||
#################################
|
||||
# # # # # # #
|
||||
# ######### # # ### # # ### ### #
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
|
||||
|
||||
|
||||
# ##### ##
|
||||
### ### ### ### # ### # # # #####
|
||||
# # # # # # # # # # #
|
||||
# # ### # # # # ####### # # ### #
|
||||
# # # # # # # # # # # #
|
||||
####### ### ### # ####### ### # #
|
||||
# # # # # # # # # #
|
||||
# # # ### ### # # # # ### # #####
|
||||
# # # # # # # # # #
|
||||
# # ### # ### # # ### # # ### # #
|
||||
# # # # # # # # # # #
|
||||
# # # ### ### # ### ### ### # # #
|
||||
# # # # # # # # # # # #
|
||||
# ### ##### ##### # ######### ###
|
||||
# # # # # # #
|
||||
##### ### # ### ####### # ##### #
|
||||
## ##
|
||||
## ## ##
|
||||
# ######### # # ####### ##### ###
|
||||
# # # # # # # # #
|
||||
### ### ### ########### ### # ###
|
||||
# # # # # # #
|
||||
# # ### # ### # ##### ### ### # #
|
||||
# # # # # # # # #
|
||||
# # ##### ### ### ### # ### # ###
|
||||
# # # # # # # # # #
|
||||
# ##### # # ##### # # ##### #####
|
||||
# # # # # # # # # # # # #
|
||||
# # ### ##### ####### # # # ### #
|
||||
# # # # # #
|
||||
#################################
|
||||
P ## ## ##
|
||||
##################################################################
|
||||
##################################################################
|
Loading…
Reference in New Issue
Block a user