Initial commit of 2D RPG Engine. @dacav come help.
This commit is contained in:
commit
8dcd42c97b
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/bin
|
||||
17
CMakeLists.txt
Normal file
17
CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(bettola VERSION 0.1)
|
||||
|
||||
# Let's use C++17?
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Deps.
|
||||
find_package(SDL3 REQUIRED)
|
||||
find_package(GLEW REQUIRED)
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
add_executable(bettola src/main.cpp)
|
||||
|
||||
target_link_libraries(bettola PRIVATE SDL3::SDL3 GLEW::glew OpenGL::GL)
|
||||
|
||||
46
Makefile
Normal file
46
Makefile
Normal file
@ -0,0 +1,46 @@
|
||||
SHELL:=/bin/bash
|
||||
BUILD_DIR:=bin
|
||||
PROJECT_NAME:=bettola
|
||||
EXECUTABLE:=$(BUILD_DIR)/$(PROJECT_NAME)
|
||||
|
||||
CXX_COMPILER:=clang++
|
||||
CMAKE_MAKEFILE:=$(BUILD_DIR)/Makefile
|
||||
|
||||
.PHONY: all build config run clean help
|
||||
|
||||
# Default.
|
||||
all: build
|
||||
|
||||
# Build project, if not configured, then do that first.
|
||||
build: $(CMAKE_MAKEFILE)
|
||||
@echo "==== Building Bettola ===="
|
||||
@cmake --build $(BUILD_DIR)
|
||||
|
||||
# run 'config' target if the build directory or CMake cache is missing.
|
||||
$(CMAKE_MAKEFILE):
|
||||
$(MAKE) config
|
||||
|
||||
config:
|
||||
@echo "==== Configuring Bettola with CMake ===="
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@cmake -S . -B$(BUILD_DIR) -DCMAKE_CXX_COMPILER=$(CXX_COMPILER)
|
||||
|
||||
# Build and run.
|
||||
run: all
|
||||
@echo "==== Running Bettola ===="
|
||||
$(EXECUTABLE)
|
||||
|
||||
# Remove build dir.
|
||||
clean:
|
||||
@echo "==== Cleaning Bettola ===="
|
||||
@rm -rf $(BUILD_DIR)
|
||||
@echo "==== Project Cleaned ===="
|
||||
|
||||
help:
|
||||
@echo "Available commands:"
|
||||
@echo " make - Build the project (default)."
|
||||
@echo " make build - Build the project."
|
||||
@echo " make run - Build and run the project."
|
||||
@echo " make config - Force CMake to re-configure the project."
|
||||
@echo " make clean - Remove all build files"
|
||||
|
||||
39
README.org
Normal file
39
README.org
Normal file
@ -0,0 +1,39 @@
|
||||
#+TITLE: Bettola Game
|
||||
|
||||
A 2D RPG game and engine created with C++, SDL3, and OpenGL.
|
||||
|
||||
* Dependencies
|
||||
The following dependencies are requird:
|
||||
- A C++ compiler (e.g., clang, g++)
|
||||
- CMake (3.16 or newer)
|
||||
- SDL3 development libraries
|
||||
- GLEW development libraries
|
||||
|
||||
** Installation (Debian)
|
||||
You can install all required dependencies with the following command:
|
||||
#+BEGIN_SRC bash
|
||||
sudo apt update
|
||||
sudo apt install build-essential clang cmake libsdl3-dev libglew-dev
|
||||
#+END_SRC
|
||||
|
||||
* Build Instructions
|
||||
This project uses a top-level Makefile to simplify the CMake workflow. All build artifacts will be placed in the =bin/= directory.
|
||||
|
||||
Run the following from the root of the project directory.
|
||||
|
||||
- *Build the project:*
|
||||
The executable will be located in =bin/bettola=.
|
||||
#+BEGIN_SRC bash
|
||||
make
|
||||
#+END_SRC
|
||||
|
||||
- *Build and run the project:*
|
||||
#+BEGIN_SRC bash
|
||||
make run
|
||||
#+END_SRC
|
||||
|
||||
- *Clean the project:*
|
||||
This removes the =bin/= directory.
|
||||
#+BEGIN_SRC bash
|
||||
make clean
|
||||
#+END_SRC
|
||||
84
src/main.cpp
Normal file
84
src/main.cpp
Normal file
@ -0,0 +1,84 @@
|
||||
#include <SDL3/SDL.h>
|
||||
#include <GL/glew.h>
|
||||
#include <SDL3/SDL_error.h>
|
||||
#include <cstdio>
|
||||
|
||||
const int SCREEN_WIDTH = 800;
|
||||
const int SCREEN_HEIGHT = 600;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
/* Initialise SDL. */
|
||||
if(!SDL_Init(SDL_INIT_VIDEO)) {
|
||||
fprintf(stderr, "Failed to init SDL! SDL ERROR: %s\n", SDL_GetError());
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* OpenGL context attributes */
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
|
||||
/* Create the window. */
|
||||
SDL_Window* window = SDL_CreateWindow(
|
||||
"Bettola Makes No Sense!",
|
||||
SCREEN_WIDTH,
|
||||
SCREEN_HEIGHT,
|
||||
SDL_WINDOW_OPENGL
|
||||
);
|
||||
|
||||
if(!window) {
|
||||
fprintf(stderr, "Failed to create window! SDL_ERROR: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* OpenGL context. */
|
||||
SDL_GLContext gl_context = SDL_GL_CreateContext(window);
|
||||
if(!gl_context) {
|
||||
fprintf(stderr, "Failed to create OpenGL context! SDL_ERROR: %s\n", SDL_GetError());
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* GLEW init - Must be done AFTER creating the GL context. */
|
||||
glewExperimental = GL_TRUE;
|
||||
GLenum glew_error = glewInit();
|
||||
if(glew_error != GLEW_OK) {
|
||||
fprintf(stderr, "Failed to init GLEW! %s\n", glewGetErrorString(glew_error));
|
||||
SDL_GL_DestroyContext(gl_context);
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Set viewport. */
|
||||
glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
|
||||
|
||||
/* Main game loop.. For now. */
|
||||
bool is_running = true;
|
||||
SDL_Event event;
|
||||
|
||||
while(is_running) {
|
||||
/* Event handling. */
|
||||
while(SDL_PollEvent(&event)) {
|
||||
if(event.type == SDL_EVENT_QUIT) {
|
||||
is_running = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Render that b*tch. */
|
||||
glClearColor(0.1f, 0.1f, 0.3f, 1.0f); /* Dark blue or something. */
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
/* Swap the buffers. */
|
||||
SDL_GL_SwapWindow(window);
|
||||
}
|
||||
|
||||
/* Clean up after ourselves. */
|
||||
SDL_GL_DestroyContext(gl_context);
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user