GreenBox
GreenBox — основа онлайн-игры, построенной на WebSocket (STOMP), Three.js, Spring Boot/Security и PostgreSQL.
Общая логика работы
- Команды от клиента отправляются на сервер через WebSocket (STOMP).
- После контроллера команды попадают в специальные хранилища.
- Хранилище команд реализовано через
CommandPool<T>. - Из хранилища команды передаются в игровой цикл, который:
- вызывает сервисы для обработки команд и расчёта игровой логики,
- работает с игровыми хранилищами, сохраняет данные из игровых сущностей в сущности БД.
- В процессе выполнения команд данные отправляются клиенту по личным WS-каналам.
- Клиент обновляет состояние персонажа по мере получения данных и своего игрового цикла.
- Также существуют информационные каналы:
- лог PvP,
- лог перезарядки оружия,
- уведомления о превышении допустимой дистанции для выстрела,
- уведомления о превышении лимита команд на атаку.
Структура проекта
- config — настройки Security, WebSocket, простого логгера.
- gameloop — игровой цикл сервера, работает с потоками. Сохраняет параметры игроков в БД (раз в n времени).
-
manager
-
combat— расчёт PvP, -
environment— расчёт видимых позиций и объектов, -
event— игровые события, -
move— перемещение по игровому миру.
-
- model — модели для БД, DTO, модели игрового цикла, мапперы.
-
pool — хранилища команд, игроков, оружия и т.д.
CommandPoolInitBeenописывает бины хранилищ. - world — контроллер запуска игры, инициализация игроков.
Серверная игровая логика
- Сервер знает положение игрока и после получения конечной точки от клиента рассчитывает движение, передавая каждый шаг обратно.
- Команды перемещения не накапливаются: движение выполняется только к одной конечной точке (при необходимости можно расширить до серии команд: точка A → B → C и т.д.). Скорость перемещения зависит от показателя скорости игрока.
- Игроки могут атаковать друг друга. При клике на противника отправляется команда на сервер.
- Подряд могут быть выполнены только 4 атаки, после чего требуется время на перезарядку оружия.
- Ход боя отображается в логе PvP, доступном по нажатию на иконку мечей.
Запуск
- Запустить через Maven (
spring-boot:run). - Перейти на http://localhost:8080/login.
- Ввести
user1:1234. - Инициализация игроков находится в пакете world, класс PlayerInitializer.
GreenBox
GreenBox is the foundation of an online game built on WebSocket (STOMP), Three.js, Spring Boot/Security, and PostgreSQL.
Overall Logic of Operation
- Commands from the client are sent to the server via WebSocket (STOMP).
- After the controller, commands go to special repositories.
- The command repository is implemented via
CommandPool<T>. - From the repository, commands are passed to the game loop, which:
- calls services to process commands and calculate game logic,
- works with game repositories, saves data from game entities to DB entities.
- During command execution, data is sent to the client via personal WS channels.
- The client updates the character state as it receives data and its own game loop.
- There are also information channels:
- PvP log,
- weapon reload log,
- notifications about exceeding the allowable shooting distance,
- notifications about exceeding the attack command limit.
Project Structure
- config — Security, WebSocket, and simple logger settings.
- gameloop — server game loop, works with threads. Saves player parameters to the DB (every n time).
-
manager
-
combat— PvP calculation, -
environment— calculation of visible positions and objects, -
event— game events, -
move— movement in the game world.
-
- model — models for DB, DTO, game loop models, mappers.
-
pool — command repositories, players, weapons, etc.
CommandPoolInitBeandescribes repository beans. - world — game launch controller, player initialization.
Server Game Logic
- The server knows the player's position and, after receiving the endpoint from the client, calculates the movement, passing each step back.
- Movement commands do not accumulate: movement is performed only to one endpoint (if necessary, it can be extended to a series of commands: point A → B → C, etc.). Movement speed depends on the player's speed indicator.
- Players can attack each other. Upon clicking on an opponent, a command is sent to the server.
- Only 4 attacks can be performed in a row, after which time is required to reload the weapon.
- The battle turn is displayed in the PvP log, available by clicking on the swords icon.
Launch
- Run via Maven (
spring-boot:run). - Go to http://localhost:8080/login.
- Enter
user1:1234. - Player initialization is in the world package, class PlayerInitializer.
