Git Product home page Git Product logo

engine's People

Contributors

aaldwell avatar jeffuong avatar luckadletz avatar masstronaut avatar zulvinia avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

playmer

engine's Issues

Reflection Engine using clang

Build a custom reflection engine using clang to ingest the source code. Output should be more source code that other tools can link to.

Directory watcher

We need a directory watcher to notify us when assets (shaders, models, textures, scripts, etc.) get updated on disk so we can hotload them automatically for a seamless user experience.

ESFW is a cross platform file watcher without dependencies (beyond OS + stdlib), so I think it's a good place to start.

Deserialization

Building on #5 and #6, implement deserialization so that a C++ instance of an object can be constructed from its JSON representation.

Entities with multiple models?

per Entity.inl line 17, multiple model components cannot currently exist
assert( this->Has( ) == false && "An entity may only be associated with a single instance of each component type." );

Test case: Create an entity with a cube model. Add several smaller cube models to orbit around this one, and have them move together as one.

Question: Should each smaller cube then be it's own entity, or would it be wise to allow a CModel component to house multiple model references?

Modify/Update the CModel component of an Entity

Currently the only way to do is with a:
Remove;
Add("newmodel.obj"); //Remove fix pending

Suggested solution:
EntityRef::Update()("newmodel.obj")

  • Points the model component to the new model reference, and loads it if it isn't already loaded

Ensure that the current model is only deleted from memory when there are 0 references to it.
I.E. Create a few clones, update the model on just one without breaking the others.

PlayFab Integration

Playfab provides a variety of live ops services, including telemetry an analytics. We should integrate so we can start recording telemetry for analysis and get in the habit of instrumenting our code with telemetry.

Entity Hierarchies

To resolve #34, entity hierarchies need to be implemented. This should be done in the form:

EntityRef parent;
EntityRef child;
child.SetParent(parent);

Behind the scenes:

  1. The parent should have child added to a vector of children
  2. The child should have its parent handle set to its new parent
  3. Any component with a member of the form ComponentHandle<T> Parent; on the child should have the Parent member set to the parent's component of that type, if it has one.
  4. Any component with a Parent member where !std::is_same_v<T, Component> should result in a compile time error
  5. Any component containing a Parent handle should have its parent set when added to a child entity.

Output Message Batching / Buffers

Enhancement / Feature.
1 line macro to output text to a buffer of a batching system.

Ideally we would have three separate buffers, 1 for errors, 1 for events, and one for everything else, i.e. general debugging. Separating out message types allows us to more easily filer and navigate the output. The batching system would collect all of these and then output them at the end of the frame to wherever we want, based of those filters. This way, all text output can easily be switched to or additionally output to a log file, or any other source we desire on the file without editing any of the individual lines feeding the buffers.

Potential Examples:
//usage
ERROR_TEXT("Graphics failed to initialize! value of window handle: ", pWindow);
DEBUG_TEXT("Just checking to see if the code hits this line.");
EVENT_TEXT("Model loaded: ", m_name);

//directing output
TextBatcher.eventBuffer.outputMode = TextBatcher::eOutputModes::Logfile;
TextBatcher.errorBuffer.outputMode = TextBatcher::eOutputModes::Screen;
TextBatcher.debugBuffer.outputMode = TextBatcher::eOutputModes::Console;

This would replace all std::cout text output currently in the engine and eliminate a building tech debt in this area.

Tabs or spaces?

Discuss. Also, as we're planning to eventually have automatic formatting, is this something we need to worry about?

Have ConstrainedEntityRef hold pointers to its components

ConstrainedEntityRef should hold pointers to the components it has been constrained for. When they move in memory, the ComponentPool should send out an event so that the ComponentAggregate can update those held pointers with the new memory location of the moved data.

The expected outcome of this change is better performance for component lookups.

Update EventArena to use slot_map

slot_map is an excellent solution for storing the callbacks as it generates a unique ID which can be used to remove the callback later if the event arena outlives the listener

Move clang-format include to root CMakeLists

Currently include(../cmake/clangfmt.cmake) is in pilcrow/CMakeLists.txt, but it should be in the root CMakeLists.txt.

Bonus points if you can have it simply not check the dependencies folder, instead of checking and then removing them.

Serialization

Build a serialization layer that consumes the output of #5 to convert entity and component data to JSON.

Investigate adding typescript representation of engine concepts through REST API

By implementing typescript versions of engine types such as World and Entity, it becomes easier to abstract functionality built on the editor side. It would be effectively typescript as a scripting language with the REST API as the communication medium.

Having typescript scripting available could make it easier to build custom tooling going forward, and would keep the REST API coupling of the Editor/View isolated into a few small areas.

View Model - REST API for View implementations to interact with the Model

The core engine currently only has a native C++ API. To make it more accessible for external tools, a REST API should be built that exposes the data to external clients for IE developing a game editor.

REST API v0.0

Game Properties

Description HTTP Verb Path
List of all available component types GET /Components
List of all available system types GET /Systems
List of all loaded worlds GET /Worlds

Entity Properties

Description HTTP Verb Path
List of all components on an entity GET /Worlds/<World>/Entities/<ID>/Components
Read component by type GET /Worlds/<World>/Entities/<ID>/Components/<Type>
ID of the entity GET /Worlds/<World>/Entities?Name=<Name>
Modify all the data of a component PUT /Worlds/<World>/Entities/<ID>/Components/<Component>
Modify a single value of a component PATCH /Worlds/<World>/Entities/<ID>/Components/<Component>?Field=<Field>
Change the name of an entity PATCH /Worlds/<World>/Entities/<ID>
Add a component PUT /Worlds/<World>/Entities/<ID>/Components/<Component>
Remove a component DELETE /Worlds/<World>/Entities/<ID>/Components/<Component>
List of systems applying logic GET /Worlds/<World>/Systems?EntityID=<ID>

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.