Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
bf89458
feat(game) - add game directory and usage
ZigmaZero Sep 22, 2025
cec84fd
feat(game-bullethell) - add bullethell components
ZigmaZero Sep 28, 2025
c51fdf4
feat(game-rhythm) - add rhythm components
ZigmaZero Sep 28, 2025
6624808
feat(game-logic) - partial bullethell system
ZigmaZero Sep 30, 2025
fe09445
refactor(game-logic) - reorganize components
ZigmaZero Oct 7, 2025
98fc6d6
feat(game-logic) - partial rhythm system
ZigmaZero Oct 10, 2025
7af6887
feat(game-logic) - add query front
ZigmaZero Oct 11, 2025
e660aa0
refactor(game-logic) - split data structures
ZigmaZero Oct 11, 2025
d84a9d0
Merge remote-tracking branch 'origin/feat(renderer)' into feat/game-l…
ZigmaZero Oct 12, 2025
818ba75
fix(scene) - merge conflict
ZigmaZero Oct 12, 2025
09b06df
refactor(game-logic) - adhere to system writeup
ZigmaZero Oct 12, 2025
d86e034
Merge branch 'main' into feat/game-logic
ZigmaZero Oct 13, 2025
ae29fa0
Merge branch 'main' into feat/game-logic
ZigmaZero Oct 30, 2025
6cefe8e
feat(game) - finalize game systems for now
ZigmaZero Nov 6, 2025
15dfdce
fix(game-logic) - change parameter
ZigmaZero Nov 7, 2025
aca157e
feat(game-logic) - Add constructor to components by design.
lolpopih845 Nov 10, 2025
7f882d4
feat(game-logic) - Add missing components and Adjust Movement System(…
lolpopih845 Nov 10, 2025
9c441ec
feat(game-logic) - Fix rectangular_collider.h
lolpopih845 Nov 10, 2025
1d754be
feat(game-logic) - Fix Text error and update bullet.h
lolpopih845 Nov 10, 2025
df77c18
feat(game-logic) - Adjust movement_system.h
lolpopih845 Nov 10, 2025
8011265
feat(game-logic) - Bullet hell test (Movement, BulletSystem)
lolpopih845 Nov 10, 2025
ec76271
Merge branch 'main' into feat/game-logic
ZigmaZero Nov 20, 2025
832e0ed
Revert bad merge from commit fee1eb5
ZigmaZero Nov 20, 2025
33adece
fix(game-test) - Werr moment
ZigmaZero Nov 20, 2025
3b307f1
Merge branch 'main' into feat/game-logic
ZigmaZero Nov 20, 2025
2105615
Merge branch 'main' into feat/game-logic
ZigmaZero Nov 22, 2025
e12eddb
Merge branch 'main' into feat/game-logic
ZigmaZero Dec 3, 2025
730b5a6
docs(game-logic) - mark for todo/fixme
ZigmaZero Dec 3, 2025
cb45639
fix(ecs) - syscall store internal rm reference
ZigmaZero Dec 3, 2025
a622026
Merge branch 'main' into feat/game-logic
ZigmaZero Dec 15, 2025
530fb38
feat(systems) - implement system lineup
ZigmaZero Dec 24, 2025
9275500
Merge branch 'main' into feat/game-logic
ZigmaZero Dec 24, 2025
95913ad
Revert "Merge branch 'main' into feat/game-logic"
ZigmaZero Dec 25, 2025
63eb736
Revert "feat(systems) - implement system lineup"
ZigmaZero Dec 25, 2025
db30ce7
fix(ecs) - mark occupied properly
ZigmaZero Dec 25, 2025
a115f9d
Reapply "feat(systems) - implement system lineup"
ZigmaZero Dec 25, 2025
c269057
Reapply "Merge branch 'main' into feat/game-logic"
ZigmaZero Dec 25, 2025
9ebca8d
fix(battle-scene) - add query/phase guards
ZigmaZero Dec 25, 2025
af36b5f
feat(battle-scene) - add skeletons to implement
ZigmaZero Dec 25, 2025
6cfc9a3
feat(bullet-collision) - Change Collider & Implement OBB vs circle check
lolpopih845 Dec 26, 2025
09dcbf3
feat(pattern) - Reimagine Pattern Component
lolpopih845 Dec 26, 2025
906d80b
fix(battle-scene) - required components in system
ZigmaZero Dec 27, 2025
5704c3c
feat(scene) - simplify scene-making
ZigmaZero Jan 1, 2026
7b64449
waiting for get<T> build failed solving
lolpopih845 Jan 1, 2026
1ece0e7
feat(battle-scene) - add judgement count
Pooh5821 Jan 8, 2026
51e4c9b
fix(rhythm) - change judge word
Pooh5821 Jan 8, 2026
46de8c5
feat(battle) - implement handle rhythm
Pooh5821 Jan 8, 2026
26844a9
fix(rhythm) - edit function
Pooh5821 Jan 8, 2026
e12b06d
fix(rhythm) - modify handle miss notes
Pooh5821 Jan 8, 2026
86abe2f
fix(rhythm) - fix timing
Pooh5821 Jan 8, 2026
bb54e6d
fix(rhythm) - refactor timing
Pooh5821 Jan 8, 2026
c868cc6
feat(rhythm) - handle hold note
Pooh5821 Jan 9, 2026
7c32573
fix(scene) - rhythmbullet basic fix & new todo
ZigmaZero Jan 9, 2026
0691c9b
feat(rhythm) - create demo chart
Pooh5821 Jan 15, 2026
cca6f80
fix(rhythm) - add configuration
Pooh5821 Jan 16, 2026
5e9e3ab
fix(rhythm) - fix handle rhythm
Pooh5821 Jan 16, 2026
9acebbd
Merge remote-tracking branch 'origin/feat/game-logic' into feat/game-…
lolpopih845 Jan 16, 2026
ffa93ad
fix(physics) - Make it X,Y,Z for further uses.
lolpopih845 Jan 16, 2026
c9ea366
feat(animation) - Rework Animation (Unfinished)
lolpopih845 Jan 16, 2026
eb82dac
add input to battlescene
ZigmaZero Jan 19, 2026
fe7cc95
fix(Pattern) - Handle looping pattern.
lolpopih845 Jan 19, 2026
2863120
fix(Particle) - Add fade option (resume when renderer finished)
lolpopih845 Jan 21, 2026
a627767
Merge remote-tracking branch 'origin/feat/game-logic' into feat/game-…
lolpopih845 Jan 21, 2026
73cdbcb
fix(Acceleration) - Add MaxSpeed
lolpopih845 Jan 21, 2026
6996fdf
feat(Pattern) - Add Preset Popular Pattern
lolpopih845 Jan 21, 2026
34420b6
fix(Rotation) - Add Render::Rotation for separation
lolpopih845 Jan 21, 2026
3de1acc
fix(Pattern) - Why did I do that + Add maxspeed
lolpopih845 Jan 21, 2026
c8d3d3f
feat(Emitter) - Emitter Components
lolpopih845 Jan 21, 2026
66a59c1
feat(Physics) - Add Physics Utils (Please Revise)
lolpopih845 Jan 21, 2026
8d6a8cf
feat(Shaker) - For shaking effect
lolpopih845 Jan 21, 2026
fbfe541
Merge branch 'feat/game-logic' of https://github.com/ProjectGrinder/C…
Pooh5821 Jan 22, 2026
c3782d5
fix(rhythm) - fix handling notes
Pooh5821 Jan 23, 2026
2b02970
fix(rhythm) - fix handle miss notes
Pooh5821 Jan 23, 2026
f857f5b
fix(game-logic) - compile time errors
ZigmaZero Jan 23, 2026
3e95610
Merge remote-tracking branch 'origin/feat/game-logic' into feat/game-…
lolpopih845 Jan 23, 2026
165fd12
Emitter To be implement
lolpopih845 Jan 23, 2026
39ecbf7
fix(rand) - change to uniform int
ZigmaZero Jan 23, 2026
e1c4963
Remove SyncRotation 🥹
lolpopih845 Jan 23, 2026
28ea7cc
Merge remote-tracking branch 'origin/feat/game-logic' into feat/game-…
lolpopih845 Jan 24, 2026
6af2855
Fix(asset_test) - Forgot to fix CMake
lolpopih845 Jan 24, 2026
3be83fd
Fix(homing pattern) - Fix compile error
lolpopih845 Jan 24, 2026
a1e5751
Fix(Render) - List Render Component
lolpopih845 Jan 24, 2026
509eeb8
feat(game-render) - (badly) impl drawdescription
ZigmaZero Jan 26, 2026
07675df
feat(rhythm) - create demo rhythm scene
Pooh5821 Jan 27, 2026
d4bad25
fix(rhythm) - fix hold note check logic and refactor
Pooh5821 Jan 27, 2026
30f64ac
feat(rhythm) - adjust demo scene
Pooh5821 Jan 28, 2026
ba93aad
fix(game-logic/rhythm) - compile errors
ZigmaZero Jan 30, 2026
311e650
fix(game-logic/rhythm) - integrate demo chart
ZigmaZero Jan 30, 2026
3fe3b32
(render-logic) - try intent storage
ZigmaZero Jan 31, 2026
137fcbf
refactor(render-logic) - move istorage to scenes
ZigmaZero Jan 31, 2026
3505dbd
feat(intent-storage) - implement storage
ZigmaZero Feb 1, 2026
fba3590
feat(game-logic) - add intent systems
ZigmaZero Feb 2, 2026
d9cdc06
feat(render-logic) - add render packet storage
ZigmaZero Feb 4, 2026
1aa725b
refactor - code convention (format)
ZigmaZero Feb 4, 2026
c1b69e4
refactor - func naming & return convention
ZigmaZero Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions include/game.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#include "game/systems.h"
37 changes: 37 additions & 0 deletions include/game/components.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#pragma once

#include "components/battle/battlestate.h"
#include "components/bullethell/bullet.h"
#include "components/bullethell/emitter.h"
#include "components/bullethell/input.h"
#include "components/bullethell/particle.h"
#include "components/bullethell/pattern.h"
#include "components/bullethell/pattern_bounce.h"
#include "components/bullethell/pattern_homing.h"
#include "components/bullethell/player.h"
#include "components/bullethell/tag.h"
#include "components/physics/acceleration.h"
#include "components/physics/angular_velocity.h"
#include "components/physics/circular_collider.h"
#include "components/physics/position.h"
#include "components/physics/rectangular_collider.h"
#include "components/physics/rotation.h"
#include "components/physics/scale.h"
#include "components/physics/shaker.h"
#include "components/physics/velocity.h"
#include "components/render/animator.h"
#include "components/render/camera.h"
#include "components/render/intent_handle.h"
#include "components/render/material.h"
#include "components/render/rotation.h"
#include "components/render/sprite.h"
#include "components/render/text.h"
#include "components/rhythm/holdactive.h"
#include "components/rhythm/judgetext.h"
#include "components/rhythm/keyinput.h"
#include "components/rhythm/lane.h"
#include "components/rhythm/notespeed.h"
#include "components/rhythm/timing.h"
#include "components/rhythm/timingend.h"

#include "system/ecs.h"
193 changes: 193 additions & 0 deletions include/game/components/battle/battlestate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
#pragma once
#include <string>
#include <utility>
#include <vector>

namespace Game::Battle
{

// intermediate structures
enum Instrument
{
NO_INSTRUMENT,
};

enum CurrentPhase
{
NO_PHASE,
BULLET_HELL,
RHYTHM
};

struct NoteData
{
bool is_hold;
int timing;
int timing_end;
NoteData() : is_hold(false), timing(0), timing_end(0)
{}
explicit NoteData(const bool is_hold, const int timing, const int timing_end) :
is_hold(is_hold), timing(timing), timing_end(timing_end)
{}
};

struct LaneInfo
{
std::vector<NoteData> notes;
int lane_number;
unsigned int current_note;
LaneInfo() : lane_number(0), current_note(0)
{}
explicit LaneInfo(const int lane_number) : lane_number(lane_number), current_note(0)
{}
};

struct Difficulty
{
Instrument instrument;
int difficulty;
Difficulty() : instrument(NO_INSTRUMENT), difficulty(0)
{}
explicit Difficulty(const Instrument instrument, const int difficulty) :
instrument(instrument), difficulty(difficulty)
{}
};

struct JudgementCount
{
int perfect_count;
int great_count;
int fine_count;
int miss_count;
JudgementCount() : perfect_count(0), great_count(0), fine_count(0), miss_count(0)
{}
explicit JudgementCount(
const int perfect_count, const int great_count, const int fine_count, const int miss_count) :
perfect_count(perfect_count), great_count(great_count), fine_count(fine_count), miss_count(miss_count)
{}
};

struct BpmInfo
{
struct InfoPair
{
int timing;
float bpm;
};
std::vector<InfoPair> bpm_list;
unsigned int idx;
BpmInfo() : idx(0)
{}
explicit BpmInfo(const unsigned int idx) : idx(idx)
{}
};

struct PhaseInfo
{
struct InfoPair
{
int timing;
CurrentPhase phase;
};
std::vector<InfoPair> phase_list;
unsigned int idx;
PhaseInfo() : idx(0)
{}
explicit PhaseInfo(const unsigned int idx) : idx(idx)
{}
};

// use these structures

struct BattleState
{
int max_hp;
int hp;
int score;
int clock_time;
int total_accept;
int current_accept;
int max_accept_gauge;
Difficulty difficulty;
JudgementCount judgement_count;
CurrentPhase current_phase;
BattleState() :
max_hp(0),
hp(0),
score(0),
clock_time(0),
total_accept(0),
current_accept(0),
max_accept_gauge(0),
current_phase(BULLET_HELL)
{}
explicit BattleState(const int max_hp, const int max_accept_gauge, const Difficulty difficulty) :
max_hp(max_hp),
hp(0),
score(0),
clock_time(0),
total_accept(0),
current_accept(0),
max_accept_gauge(max_accept_gauge),
difficulty(difficulty),
current_phase(BULLET_HELL)
{}
};

struct BulletHellState
{
int graze;
int iframe_time;
BulletHellState() : graze(0), iframe_time(0)
{}
};

struct RhythmState
{
int heal_hp;
int base_score;
int total_notes;
float note_speed;
RhythmState() : heal_hp(0), base_score(0), total_notes(0), note_speed(0)
{}
RhythmState(const int heal_hp, const int base_score, const int total_notes, const float note_speed) :
heal_hp(heal_hp), base_score(base_score), total_notes(total_notes), note_speed(note_speed)
{}
};

struct ChartData
{
LaneInfo lanes[4];
};

// TODO: Suchas's struct BulletPatternData

struct LevelData
{
std::string title;
std::string artist_name;
std::string genre_name;
float main_bpm;
BpmInfo bpm_info;
PhaseInfo phase_info;
std::vector<Difficulty> difficulties;
LevelData() : main_bpm(0)
{}
explicit LevelData(
std::string title,
std::string artist_name,
std::string genre_name,
const float main_bpm,
BpmInfo bpm_info,
PhaseInfo phase_info,
std::vector<Difficulty> difficulties) :
title(std::move(title)),
artist_name(std::move(artist_name)),
genre_name(std::move(genre_name)),
main_bpm(main_bpm),
bpm_info(std::move(bpm_info)),
phase_info(std::move(phase_info)),
difficulties(std::move(difficulties))
{}
};
} // namespace Game::Battle
17 changes: 17 additions & 0 deletions include/game/components/bullethell/bullet.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

namespace Game::BulletHell
{
struct Bullet
{
int telegraph_time;
bool is_active;
bool is_damageable;
int damage;
Bullet() : telegraph_time(0), is_active(true), is_damageable(false), damage(0)
{}
explicit Bullet(const int telegraph_time, const int damage) :
telegraph_time(telegraph_time), is_active(true), is_damageable(false), damage(damage)
{}
};
} // namespace Game::BulletHell
137 changes: 137 additions & 0 deletions include/game/components/bullethell/emitter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
#pragma once

#include "particle.h"

// TODO : Each of them should be inputted with prototype entity (prefab) + Single Bullet spawning is currently being
// considered
namespace Game::BulletHell
{
struct BoomEmitter
{
Bullet particle;
float delay;
float scale;
float sustain_time;
explicit BoomEmitter(const Bullet particle, const float delay, const float scale, const float sustain_time) :
particle(particle), delay(delay), scale(scale), sustain_time(sustain_time)
{}
};

struct LaserEmitter
{
Bullet particle;
float delay;
float rotation;
float width;
float length;
float sustain_time;
float speed;
explicit LaserEmitter(
const Bullet particle,
const float delay,
const float rotation,
const float width,
const float length,
const float sustain_time,
const float speed) :
particle(particle),
delay(delay),
rotation(rotation),
width(width),
length(length),
sustain_time(sustain_time),
speed(speed)
{}
};

struct RingEmitter
{
Particle particle;
float delay;
float rotation;
float width;
float length;
float fire_delay;
int bullet_quantity;

int bullet_fired = 0;
explicit RingEmitter(
const Particle particle,
const float delay,
const float rotation,
const float width,
const float length,
const float fire_delay,
const int bullet_quantity) :
particle(particle),
delay(delay),
rotation(rotation),
width(width),
length(length),
fire_delay(fire_delay),
bullet_quantity(bullet_quantity)
{}
};

struct RandomEmitter
{
Particle particle;
float delay;
float angle_range;
float center_rotation;
float width;
float length;
float fire_delay;
int bullet_quantity;
explicit RandomEmitter(
const Particle particle,
const float delay,
const float angle_range,
const float center_rotation,
const float width,
const float length,
const float fire_delay,
const int bullet_quantity) :
particle(particle),
delay(delay),
angle_range(angle_range),
center_rotation(center_rotation),
width(width),
length(length),
fire_delay(fire_delay),
bullet_quantity(bullet_quantity)
{}
};

struct SpreadEmitter
{
Particle particle;
float delay;
float angle_range;
float center_rotation;
float width;
float length;
float fire_delay;
int bullet_quantity;

int bullet_fired = 0;
explicit SpreadEmitter(
const Particle particle,
const float delay,
const float angle_range,
const float center_rotation,
const float width,
const float length,
const float fire_delay,
const int bullet_quantity) :
particle(particle),
delay(delay),
angle_range(angle_range),
center_rotation(center_rotation),
width(width),
length(length),
fire_delay(fire_delay),
bullet_quantity(bullet_quantity)
{}
};
} // namespace Game::BulletHell
Loading