Quick Start

В этом разделе вы создадите свою первую сцену в Wudgine всего за несколько минут.

Создание нового проекта

Самый быстрый способ начать работу с Wudgine — использовать шаблон базового проекта:

wudgine create my-first-game --template basic
cd my-first-game

Эта команда создаст новый проект с базовой структурой и всеми необходимыми файлами.

Структура проекта

После создания проекта вы увидите следующую структуру файлов:

my-first-game/
├── assets/
│   ├── models/
│   ├── textures/
│   └── shaders/
├── src/
│   ├── components/
│   ├── systems/
│   ├── ui/
│   └── main.cpp
├── CMakeLists.txt
└── wudgine.config.json

Запуск проекта

Чтобы запустить созданный проект, выполните:

wudgine build
wudgine run

Вы увидите окно с пустой сценой и базовой камерой.

Добавление объекта на сцену

Давайте добавим простой куб на сцену. Откройте файл src/main.cpp и найдите функцию initializeScene(). Добавьте следующий код:

void initializeScene() {
  // Создаем сущность для куба
  Entity cube = world.createEntity("Cube");
  
  // Добавляем компонент Transform для позиционирования
  auto& transform = cube.addComponent<Transform>();
  transform.position = Vector3(0.0f, 0.0f, 0.0f);
  transform.rotation = Quaternion::identity();
  transform.scale = Vector3(1.0f, 1.0f, 1.0f);
  
  // Добавляем компонент MeshRenderer для отображения
  auto& renderer = cube.addComponent<MeshRenderer>();
  renderer.mesh = AssetManager::loadMesh("cube");
  renderer.material = AssetManager::loadMaterial("default");
  
  // Добавляем компонент для вращения (опционально)
  auto& rotator = cube.addComponent<Rotator>();
  rotator.speed = 45.0f; // градусов в секунду
}

Теперь добавьте систему вращения в основной файл:

src/main.cpp
#include "systems/RotationSystem.h"

// ...

int main() {
  // ...
  
  // Регистрируем систему вращения
  world.addSystem<RotationSystem>();
  
  // ...
}

Запуск и тестирование

Соберите и запустите проект снова:

wudgine build
wudgine run

Теперь вы должны увидеть вращающийся куб в центре экрана!

Если вы хотите изменить скорость вращения, просто отредактируйте значение speed в компоненте Rotator.

Добавление интерактивности

Давайте добавим простое взаимодействие с кубом при клике мыши:

src/systems/InteractionSystem.h
#pragma once
#include <wudgine/system.h>
#include <wudgine/input.h>

class InteractionSystem : public System {
public:
  void update(float deltaTime) override {
    // Проверяем, был ли клик левой кнопкой мыши
    if (Input::isMouseButtonPressed(MouseButton::Left)) {
      // Получаем позицию мыши
      Vector2 mousePos = Input::getMousePosition();
      
      // Создаем луч для проверки пересечения
      Ray ray = Camera::main()->screenPointToRay(mousePos);
      
      // Проверяем пересечение с объектами
      RaycastHit hit;
      if (Physics::raycast(ray, hit)) {
        // Получаем сущность, с которой произошло пересечение
        Entity hitEntity = hit.entity;
        
        // Если у сущности есть компонент Transform
        if (hitEntity.hasComponent<Transform>()) {
          auto& transform = hitEntity.getComponent<Transform>();
          
          // Изменяем масштаб объекта
          transform.scale *= 1.2f;
          
          // Выводим сообщение в консоль
          Debug::log("Клик по объекту: " + hitEntity.getName());
        }
      }
    }
  }
};

Не забудьте добавить эту систему в основной файл:

src/main.cpp
#include "systems/InteractionSystem.h"

// ...

int main() {
  // ...
  
  // Регистрируем систему взаимодействия
  world.addSystem<InteractionSystem>();
  
  // ...
}

Что дальше?

Поздравляем! Вы создали свою первую интерактивную сцену в Wudgine. Теперь вы можете:

Изучить структуру проекта

Узнайте больше о структуре проекта Wudgine и организации файлов.

Познакомиться с редактором

Изучите возможности встроенного редактора Wudgine.

Погрузиться в ECS

Узнайте больше о системе Entity Component System.

Wudgine • © 2025