Git Product home page Git Product logo

synergy's People

Contributors

nmrsmn avatar

Watchers

 avatar

synergy's Issues

Initial setup

Create Synergy and Sandbox project and make them compile.
Sandbox should compile using Synergy as static library

Component

Components should be data only structs.

struct Transform
{
    glm::vec3 position { 0, 0, 0 };
    glm::vec3 rotation { 0, 0, 0 };
    glm::vec3 scale { 1, 1, 1 };
};

System Priority & Dependencies

Systems should be prioritized by a value taking in account dependencies between systems.

  • Something like a Synergy::DependsOn class for managing dependencies.

Views / Containers

  • View is the root view for every UI rendered screen or overlay.
  • Containers are UI Elements that can contain children.

Entity Component System

An Entity Component System is "needed". This system should atleast consist of:

  • A base Entity class that can be overridden by any Entity-like object in the engine.
  • Components should consist of only data.
  • Entities and Components should be easily accessed or searched for by Systems.

Constraints

UI Elements should be positioned and sized by using constraints. Each UI Element should have enough constraints so that the position and size can be calculated for every child or sibling.

Memory manager and allocator

An important part of the ECS is memory management. Therefor an interface should be created for managing memory (allocations and free's).

class Allocator
{
     public:
          virtual void* allocate(size_t size) = 0;
          virtual void free(void* p) = 0;
};

UI

Basic UI System including:

  • Hierarchical structured
  • Constraints
  • Elements
    • View
    • Button
    • Label
  • Styles
  • Effects

Shader enhancements

  • Loading shaders from files
  • Support for multiple shaders
  • Add default shaders

Entity

Entity base class that every entity should inherit from.

  • Creation is being handled by the Synergy::Scene.
    • Synergy::ArchetypeRef can be created by the Synergy::Scene.
    • Synergy::Scene::Spawn(Synergy::ArchetypeRef archetype) spawns the entity.
  • Destroying is being handled by the Synergy::Scene.
    • Synergy::Scene::Destroy(entity)
  • Easy access methods to Add and Get Entity linked Components.
    • Entity::Get<T>()
    • Entity::Add<T>()
    • Entity::Remove<T>()
  • Easy method to check if Entity has 1, or more Component instances linked.
    • Entity::Has<T>()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.