Skip to content

Commit 04fbf5c

Browse files
Merge pull request #94 from G-Epitech/secret-second-game
Add new example project
2 parents 948331b + 3a7466a commit 04fbf5c

File tree

14 files changed

+354
-1
lines changed

14 files changed

+354
-1
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ add_subdirectory(libs)
1515
add_subdirectory(client)
1616
add_subdirectory(server)
1717

18+
add_subdirectory(example)
19+
1820
include(cmake/cpack/cpack.cmake)

docs/docs/project/download/components.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React from "react";
22
import Link from "@docusaurus/Link";
33

4-
export const version = '0.0.3';
4+
export const version = '1.0.0';
55
export const downloadPage = 'https://github.com/G-Epitech/DFMY-RType/releases/download';
66
export const archivePage = 'https://github.com/G-Epitech/DFMY-RType/archive';
7+
78
export function ArtefactName({name, platform}) {
89
const extensions = {
910
windows: 'exe',

example/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
set(CLIENT_CORE_LIB example_core)
2+
set(CLIENT_EXECUTABLE example)
3+
4+
add_library(${CLIENT_CORE_LIB} STATIC)
5+
6+
target_include_directories(${CLIENT_CORE_LIB} PUBLIC ${CMAKE_CURRENT_LIST_DIR})
7+
target_include_directories(${CLIENT_CORE_LIB} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src)
8+
target_include_directories(${CLIENT_CORE_LIB} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/../)
9+
10+
if (WIN32)
11+
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
12+
add_executable(${CLIENT_EXECUTABLE} main.cpp)
13+
else ()
14+
add_executable(${CLIENT_EXECUTABLE} WIN32 main.cpp ../r-type.rc)
15+
endif ()
16+
file(GLOB_RECURSE DLLS "${CMAKE_CURRENT_BINARY_DIR}/../libs/**/*.dll")
17+
add_custom_command(
18+
TARGET ${CLIENT_EXECUTABLE} POST_BUILD
19+
COMMAND ${CMAKE_COMMAND} -E echo "DLLs found: ${DLLS}"
20+
)
21+
22+
foreach (DLL ${DLLS})
23+
add_custom_command(
24+
TARGET ${CLIENT_EXECUTABLE} POST_BUILD
25+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL} $<TARGET_FILE_DIR:${CLIENT_EXECUTABLE}>
26+
)
27+
endforeach ()
28+
else ()
29+
add_executable(${CLIENT_EXECUTABLE} main.cpp)
30+
set_target_properties(${CLIENT_EXECUTABLE} PROPERTIES
31+
INSTALL_RPATH "$ORIGIN")
32+
endif ()
33+
34+
include(dependencies.cmake)
35+
36+
target_link_libraries(${CLIENT_EXECUTABLE} PRIVATE ${CLIENT_CORE_LIB})
37+
38+
add_subdirectory(src)

example/dependencies.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Internal dependencies
2+
target_link_libraries(${CLIENT_CORE_LIB} PRIVATE r-type_game_sdk)
3+
target_link_libraries(${CLIENT_CORE_LIB} PRIVATE zygarde)
4+
target_link_libraries(${CLIENT_CORE_LIB} PUBLIC mew)

example/main.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
** EPITECH PROJECT, 2024
3+
** rtype
4+
** File description:
5+
** main.cpp
6+
*/
7+
8+
#include "client/src/scenes/game.hpp"
9+
#include "game/builder.hpp"
10+
#include "scenes/game.hpp"
11+
12+
using namespace mew::game;
13+
14+
#if (defined(_WIN32) && !defined(DEBUG))
15+
#include <windows.h>
16+
#define MAIN \
17+
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
18+
#else
19+
#define MAIN main()
20+
#endif
21+
22+
int MAIN {
23+
auto builder = GameBuilder();
24+
25+
builder.WithWindowProperties({
26+
.title = "Best Game",
27+
.videoMode = {800, 800},
28+
.style = sf::Style::Default,
29+
.contextSettings = sf::ContextSettings(),
30+
.frameLimit = 60,
31+
});
32+
{
33+
auto game = builder.Build();
34+
35+
game.managers.scenes->RegisterScene<SceneGame>();
36+
game.managers.scenes->GoToScene<SceneGame>();
37+
38+
return game.Run();
39+
}
40+
}

example/src/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(scenes)
2+
add_subdirectory(systems)

example/src/scenes/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
target_sources(${CLIENT_CORE_LIB} PRIVATE
2+
game.hpp
3+
game.cpp
4+
)

example/src/scenes/game.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
** EPITECH PROJECT, 2024
3+
** r-type
4+
** File description:
5+
** game.cpp
6+
*/
7+
8+
#include "game.hpp"
9+
10+
#include <utility>
11+
12+
#include "core/components/position/position.hpp"
13+
#include "physics/2d/systems/collision/collision_system.hpp"
14+
#include "physics/2d/systems/movement/movement_system.hpp"
15+
#include "physics/2d/systems/position/position_system.hpp"
16+
#include "sets/drawable/components/components.hpp"
17+
#include "sets/drawable/systems/drawable_system.hpp"
18+
#include "systems/move.hpp"
19+
#include "systems/obstacles.hpp"
20+
21+
using namespace zygarde::core::components;
22+
using namespace mew::sets;
23+
24+
SceneGame::SceneGame(DependenciesHandler::Ptr services)
25+
: SceneBase(std::move(services)), deltaTime_(0) {
26+
registry_->RegisterComponent<Tags>();
27+
registry_->RegisterComponent<physics::components::Rigidbody2D>();
28+
registry_->RegisterComponent<physics::components::BoxCollider2D>();
29+
registry_->AddSystem<physics::systems::MovementSystem>(deltaTime_);
30+
registry_->AddSystem<physics::systems::CollisionSystem>();
31+
registry_->AddSystem<physics::systems::PositionSystem>();
32+
registry_->AddSystem<MoveSystem>(managers_.window);
33+
registry_->AddSystem<ObstablesSystem>(managers_.scenes, deltaTime_);
34+
}
35+
36+
void SceneGame::OnCreate() {
37+
CreatePlayerEntity();
38+
}
39+
40+
void SceneGame::Update(DeltaTime delta_time) {
41+
deltaTime_ = delta_time;
42+
registry_->RunSystems();
43+
}
44+
45+
void SceneGame::CreatePlayerEntity() {
46+
const auto player = registry_->SpawnEntity();
47+
const core::types::Vector3f position{400, 400, 0};
48+
auto aligns = Alignment{HorizontalAlign::kCenter, VerticalAlign::kCenter};
49+
50+
registry_->AddComponent<Position>(player, Position{position, aligns});
51+
registry_->AddComponent<Tags>(player, Tags{{"player"}});
52+
registry_->AddComponent<BoxCollider2D>(
53+
player, physics::components::BoxCollider2D(core::types::Vector2f(50, 50)));
54+
registry_->AddComponent<physics::components::Rigidbody2D>(player,
55+
physics::components::Rigidbody2D{});
56+
registry_->AddComponent<drawable::Drawable>(player, {.drawable =
57+
drawable::Rectangle{
58+
.fillColor = sf::Color::Green,
59+
.outlineColor = sf::Color::Black,
60+
.outlineThickness = 0,
61+
.size = {50, 50},
62+
},
63+
.view = mew::managers::WindowManager::GAME,
64+
.layer = 10});
65+
}

example/src/scenes/game.hpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
** EPITECH PROJECT, 2024
3+
** r-type
4+
** File description:
5+
** game.hpp
6+
*/
7+
8+
#pragma once
9+
10+
#include "libs/zygarde/src/utils/timer/timer.hpp"
11+
#include "scenes/scene_base.hpp"
12+
13+
using namespace mew::scenes;
14+
15+
class SceneGame final : public SceneBase {
16+
public:
17+
explicit SceneGame(DependenciesHandler::Ptr services);
18+
~SceneGame() override = default;
19+
20+
void Update(DeltaTime delta_time) override;
21+
22+
protected:
23+
void OnCreate() override;
24+
25+
private:
26+
void CreatePlayerEntity();
27+
28+
zygarde::utils::Timer::Nanoseconds deltaTime_;
29+
};

example/src/systems/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
target_sources(${CLIENT_CORE_LIB} PRIVATE
2+
move.hpp
3+
move.cpp
4+
obstacles.cpp
5+
obstacles.hpp
6+
)

0 commit comments

Comments
 (0)