Init Project
This commit is contained in:
parent
ad9c952b90
commit
0ca3c9cc64
7 changed files with 4141 additions and 0 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -100,3 +100,9 @@ Module.symvers
|
||||||
Mkfile.old
|
Mkfile.old
|
||||||
dkms.conf
|
dkms.conf
|
||||||
|
|
||||||
|
cmake-**
|
||||||
|
|
||||||
|
.idea
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
|
build
|
56
CMakeLists.txt
Normal file
56
CMakeLists.txt
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
|
||||||
|
project(cigus
|
||||||
|
VERSION 0.0.1
|
||||||
|
LANGUAGES CXX)
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
|
||||||
|
include(cmake/CPM.cmake)
|
||||||
|
include(cmake/utils.cmake)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME spdlog
|
||||||
|
GITHUB_REPOSITORY gabime/spdlog
|
||||||
|
VERSION 1.15.2
|
||||||
|
GIT_SHALLOW ON
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
|
)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME sfml
|
||||||
|
GITHUB_REPOSITORY SFML/SFML
|
||||||
|
GIT_TAG 3.0.0
|
||||||
|
GIT_SHALLOW ON
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
|
SYSTEM
|
||||||
|
)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME nlohmann_json
|
||||||
|
GITHUB_REPOSITORY nlohmann/json
|
||||||
|
VERSION 3.11.2
|
||||||
|
GIT_SHALLOW ON
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
|
)
|
||||||
|
|
||||||
|
set(PROJECT_SOURCE_NAME "${PROJECT_NAME}_SOURCES")
|
||||||
|
|
||||||
|
find_files(ExampleSources src cpp hpp c h cxx hxx)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} ${ExampleSources} cigus.hpp)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME} PUBLIC include ./)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME} PUBLIC
|
||||||
|
spdlog::spdlog
|
||||||
|
SFML::Graphics
|
||||||
|
SFML::Window
|
||||||
|
SFML::System
|
||||||
|
SFML::Audio
|
||||||
|
SFML::Network
|
||||||
|
nlohmann_json::nlohmann_json)
|
123
cigus.hpp
Normal file
123
cigus.hpp
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <SFML/Graphics.hpp>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
|
namespace cigus {
|
||||||
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
class Ref {
|
||||||
|
T *ptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit Ref(T *ptr) : ptr(ptr) {
|
||||||
|
if (ptr == nullptr) {
|
||||||
|
spdlog::error("Ref<T> cannot be null");
|
||||||
|
throw std::runtime_error("Ref<T> cannot be null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref(const Ref &other) : ptr(other.ptr) {
|
||||||
|
if (other.ptr == nullptr) {
|
||||||
|
spdlog::error("Ref<T> cannot be null");
|
||||||
|
throw std::runtime_error("Ref<T> cannot be null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref(Ref &&other) noexcept : ptr(other.ptr) {
|
||||||
|
if (other.ptr == nullptr) {
|
||||||
|
spdlog::error("Ref<T> cannot be null");
|
||||||
|
throw std::runtime_error("Ref<T> cannot be null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref &operator=(Ref &&other) noexcept {
|
||||||
|
if (this->ptr != other.ptr) {
|
||||||
|
ptr = other.ptr;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
T &operator*() {
|
||||||
|
return *ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const T &operator*() const {
|
||||||
|
return *ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
T *operator->() {
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const T *operator->() const {
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void free() {
|
||||||
|
delete ptr;
|
||||||
|
ptr = nullptr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace cigus::UI {
|
||||||
|
class RenderCall {
|
||||||
|
sf::Drawable *drawable;
|
||||||
|
sf::RenderStates states;
|
||||||
|
|
||||||
|
public:
|
||||||
|
RenderCall(sf::Drawable *drawable, sf::RenderStates states) : drawable(drawable), states(states) {
|
||||||
|
}
|
||||||
|
|
||||||
|
~RenderCall() {
|
||||||
|
delete drawable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw(sf::RenderTarget &target, const sf::RenderStates &states) const {
|
||||||
|
target.draw(*drawable, states);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class View {
|
||||||
|
std::vector<RenderCall> m_RenderCalls;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Rectangle() {
|
||||||
|
m_RenderCalls.emplace_back(new sf::RectangleShape(sf::Vector2f(100, 100)), sf::RenderStates());
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~View() = default;
|
||||||
|
|
||||||
|
[[nodiscard]] const std::vector<RenderCall> &renderCalls() const {
|
||||||
|
return m_RenderCalls;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void body() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Renderer {
|
||||||
|
public:
|
||||||
|
explicit Renderer(const Ref<View> &_view) : view(_view) { view->body(); }
|
||||||
|
|
||||||
|
void destroy() {
|
||||||
|
view.free();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<View> view;
|
||||||
|
|
||||||
|
void update() {
|
||||||
|
view->body();
|
||||||
|
}
|
||||||
|
|
||||||
|
void render(sf::RenderTarget &target, const sf::RenderStates &states) const {
|
||||||
|
for (const auto &renderCall: view->renderCalls()) {
|
||||||
|
renderCall.draw(target, states);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
1291
cmake/CPM.cmake
Normal file
1291
cmake/CPM.cmake
Normal file
File diff suppressed because it is too large
Load diff
33
cmake/utils.cmake
Normal file
33
cmake/utils.cmake
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
function(put_targets_into_folder)
|
||||||
|
set(oneValueArgs FOLDER)
|
||||||
|
set(multiValueArgs TARGETS)
|
||||||
|
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
|
||||||
|
foreach(target ${ARGS_TARGETS})
|
||||||
|
# Check if target exists
|
||||||
|
if (NOT TARGET ${target})
|
||||||
|
message(FATAL_ERROR "${target} target not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Get the actual target (if it is aliased)
|
||||||
|
get_target_property(actual_target ${target} ALIASED_TARGET)
|
||||||
|
if (NOT actual_target)
|
||||||
|
set(actual_target ${target})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set the folder property for the target
|
||||||
|
set_target_properties(${actual_target} PROPERTIES FOLDER ${ARGS_FOLDER})
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
function(find_files var_name path)
|
||||||
|
set(sources)
|
||||||
|
foreach(ext ${ARGN})
|
||||||
|
file(GLOB_RECURSE files "${path}/*.${ext}")
|
||||||
|
list(APPEND sources ${files})
|
||||||
|
endforeach()
|
||||||
|
set(${var_name} ${${var_name}} ${sources} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
2589
include/argparse.hpp
Normal file
2589
include/argparse.hpp
Normal file
File diff suppressed because it is too large
Load diff
43
src/main.cpp
Normal file
43
src/main.cpp
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// Created by n0ffie on 08/04/25.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <cigus.hpp>
|
||||||
|
|
||||||
|
class NewView : public cigus::UI::View {
|
||||||
|
public:
|
||||||
|
void body() override {
|
||||||
|
std::cout << "Hello World!" << std::endl;
|
||||||
|
Rectangle();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
|
namespace UI = cigus::UI;
|
||||||
|
sf::RenderWindow window(sf::VideoMode({800, 600}), "Hello World!");
|
||||||
|
window.setFramerateLimit(60);
|
||||||
|
|
||||||
|
UI::Renderer renderer(cigus::Ref<UI::View>(new NewView()));
|
||||||
|
|
||||||
|
while (window.isOpen()) {
|
||||||
|
|
||||||
|
while (const std::optional event = window.pollEvent())
|
||||||
|
{
|
||||||
|
if (event->is<sf::Event::Closed>())
|
||||||
|
{
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window.clear();
|
||||||
|
renderer.render(window, sf::RenderStates());
|
||||||
|
window.display();
|
||||||
|
}
|
||||||
|
renderer.destroy();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue