Giter Club home page Giter Club logo

icengine's Introduction

ICE ENGINE

alt text

About this Project

The purpose of this project is to provide a modern C++ application framework.

How to build

First, build the common dependencies. Then, run the build scripts.

Windows

build_common.bat
cmake.bat

Linux

./build_common.sh
./cmake.sh

TODO

  • Design a serializable model for game objects
    • Select a framework for object marshalling(JSON, CapNProto, etc.)
    • Efficient, consistent, and portable design for file and network IO
    • Flexible design to allow audio, 3D mesh, video, and other multimedia files
  • Implement a physics engine to manager object dynamics
    • Collision logic and behavior for fixed objects
    • Particle physics
    • Ragdoll physics(graphics compatibilty required)
  • Implement an interface for input events in SDL
    • Allow engine to bind callback functions to key and mouse events
    • Optionally support more advanced input devices such as xbox controllers
  • Wrap SDL Window, Rendeder, Surface, other graphics APIs in C++
    • Create interface for reading renderable game objects
    • Allow for compatibility with OpenGL
    • Possibly generalize API for DirectX, Vulkan, etc.
  • Add networking features
    • TLS for secure TCP and UDP sockets.
    • Basic http(s) functionality for REST API, webpages etc.
    • Consider bluetooth and other protocols to allow for wireless controllers, microphones, etc.
  • Design a file storage solution for game resources with considerations regarding:
    • Hashing for file names
    • Security for resource data(?)
    • Integration with client/server model to synchronize resources and optimize storage footprint
    • A cross platform file IO API that can bypass the buffer delays of std::fstream when needed
  • Implement memory management to allow granular control of memory
    • Memory pool to move memory management into user space
    • Custom allocators to allow pool to be used with STL and other std C++ classes
    • Memory buffers to provide a clean and consistent C++ API for reading and writing memory blocks
  • Utilize a thread pool to improve throughput on parallelizable tasks
    • Allow default optimization based on system hardware
    • Provide both a synchronized and asynchronous interface for submitting work to thread pool
  • Documentation
    • Add doxygen comments to header files
    • Add document generation to CMakeLists
  • Packaging and Installation
    • Add CPack and intall directives in CMakeLists
    • Find a way to generate installer files for Windows
  • Unit Testing
    • Select a test framework(ctest, gtest, etc.)
    • Write a set of tests to cover API
    • Add build instructions for unit test
    • CI/CD scripts for running unit test in pipelines

icengine's People

Contributors

johnpatek avatar jordanhumphrey avatar a6guerre avatar

Stargazers

Sultan Uramaev avatar

icengine's Issues

Implement Unit Tests

This task will involve the following work:

  • Create test directory
  • Write unit tests using gtest
  • Add TESTS option to CMake
  • Implement --tests flag in build.py

Implement Memory Pool

This task involves the following work:

  • Study exisiting C implementation for memory pool
  • Design C++ API for memory pool
  • Add to memory.h and memory.cpp
  • Add memory pool member to ice::engine
  • Create function calls in ice::engine to manage memory

Create Client-Server Resource Manager

This task requires the following work:

  • Serializable resource design
  • Integration with existing client and server engines to synchronize resources
  • Implement netpong example using new architecture

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.