Project Description

The Entity Component System is Data-driven architectural pattern, using composition over inheritance (contrary to Object Oriented programming). It is used in complex systems such as simulators, games, and Fintech; where the projects specify an array of complex systems that are loosely coupled. Projects where one needs to horizontally expand and change the behavior of a small subset of systems knowing that there will be no unwanted behavioral change carried to others, while at the same time provide a way to expand functionality that can be reused by a big number of the systems.

A Flight Dynamic Model is a physics model for a flying object such as a plane. These models are present in flight simulators and games, and vary in accuracy and complexity: from simulating simple forces over a specificied wing area, using graphs from real wind tunnel experiments, to performing a virtual real-time wind tunnel against the shape of the aircraft, simulating propeller wash, ground effect, vortex effect, and others.

eXtended Position Based Dynamics is a novel approach (2020) to simulating physics that is both more performant and accurate than typical approaches.

Goal for this Hackweek

Implement the Flight Dynamic Model specified in "Physics for Game Developers, by Bryan Bywalec, David M Bourg", in an ECS. Particularly:

  • In the Bevy Engine. A performant and very ergonomic ECS engine, that provides massive parallelization for free, with a cache-friendly architecture for the resulting code.

  • Using bevy_xpbd: A physics library using the novel eXtended Position Based Dynamics, available for Bevy. XPBD is both more performant and accurate than other physics approaches. In addition, it supports variable time deltas, which could allow to simulate and reconcile the state of the world in a concurrent, desynchronized way.

Resources

  • Book "Physics for Game Developers, by Bryan Bywalec, David M Bourg"
  • https://bevy-cheatbook.github.io
  • https://www.youtube.com/watch?v=jrociOAYqxA
  • https://scholar.afit.edu/cgi/viewcontent.cgi?article=5914&context=etd

Looking for hackers with the skills:

rust physics simulator xpbd bevy flightsimulation planes

This project is part of:

Hack Week 23

Activity

  • about 1 year ago: vcuadradojuan started this project.
  • about 1 year ago: vcuadradojuan added keyword "flightsimulation" to this project.
  • about 1 year ago: vcuadradojuan added keyword "planes" to this project.
  • about 1 year ago: vcuadradojuan added keyword "xpbd" to this project.
  • about 1 year ago: vcuadradojuan added keyword "bevy" to this project.
  • about 1 year ago: vcuadradojuan added keyword "simulator" to this project.
  • about 1 year ago: vcuadradojuan added keyword "rust" to this project.
  • about 1 year ago: vcuadradojuan added keyword "physics" to this project.
  • about 1 year ago: vcuadradojuan originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    Agama installer on-line demo by lslezak

    Description

    The Agama installer provides a quite complex user interface. We have some screenshots on the web page but as it is basically a web application it would be nice to have some on-line demo where users could click and check it live.

    The problem is that the Agama server directly accesses the hardware (storage probing) and loads installation repositories. We cannot easily mock this in the on-line demo so the easiest way is to have just a read-only demo. You could explore the configuration options but you could not change anything, all changes would be ignored.

    The read-only demo would be a bit limited but I still think it would be useful for potential users get the feeling of the new Agama installer and get familiar with it before using in a real installation.

    As a proof of concept I already created this on-line demo.

    The implementation basically builds Agama in two modes - recording mode where it saves all REST API responses and replay mode where it for the REST API requests returns the previously recorded responses. Recording in the browser is inconvenient and error prone, there should be some scripting instead (see below).

    Goals

    • Create an Agama on-line demo which can be easily tested by users
    • The Agama installer is still in alpha phase and in active development, the online demo needs to be easily rebuilt with the latest Agama version
    • Ideally there should be some automation so the demo page is rebuilt automatically without any developer interactions (once a day or week?)

    TODO

    • Use OpenAPI to get all Agama REST API endpoints, write a script which queries all the endpoints automatically and saves the collected data to a file (see this related PR).
    • Write a script for starting an Agama VM (use libvirt/qemu?), the script should ensure we always use the same virtual HW so if we need to dump the latest REST API state we get the same (or very similar data). This should ensure the demo page does not change much regarding the storage proposal etc...
    • Fix changing the product, currently it gets stuck after clicking the "Select" button.
    • Move the mocking data (the recorded REST API responses) outside the Agama sources, it's too big and will be probably often updated. To avoid messing the history keep it in a separate GitHub repository
    • Allow changing the UI language
    • Display some note (watermark) in the page so it is clear it is a read-only demo (probably with some version or build date to know how old it is)
    • Automation for building new demo page from the latest sources. There should be some check which ensures the recorded data still matches the OpenAPI specification.

    Changing the UI language

    This will be quite tricky because selecting the proper translation file is done on the server side. We would probably need to completely re-implement the logic in the browser side and adapt the server for that.

    Also some REST API responses contain translated texts (storage proposal, pattern names in software). We would need to query the respective endpoints in all supported languages and return the correct response in runtime according to the currently selected language.

    Resources


    Implement a CLI tool for Trento - trentoctl by nkopliku

    Description

    Implement a trentoctl CLI for interacting with a trento installation

    Goals

    • learn rust
    • implement an initial trentoctl tool to enhance trento automation
    • have fun

    Resources

    trento rust. TUIs listed on this other hackweek project Hack on rich terminal user interfaces


    Kanidm: A safe and modern IDM system by firstyear

    Kanidm is an IDM system written in Rust for modern systems authentication. The github repo has a detailed "getting started" on the readme.

    Kanidm Github

    In addition Kanidm has spawn a number of adjacent projects in the Rust ecosystem such as LDAP, Kerberos, Webauthn, and cryptography libraries.

    In this hack week, we'll be working on Quokca, a certificate authority that supports PKCS11/TPM storage of keys, issuance of PIV certificates, and ACME without the feature gatekeeping implemented by other CA's like smallstep.

    For anyone who wants to participate in Kanidm, we have documentation and developer guides which can help.

    I'm happy to help and share more, so please get in touch!


    Hacking on sched_ext by flonnegren

    Description

    Sched_ext upstream has some interesting issues open for grabs:

    Goals

    Send patches to sched_ext upstream

    Also set up perfetto to trace some of the example schedulers.

    Resources

    https://github.com/sched-ext/scx


    Grapesss: a physical Shamir's Secret Sharing application [ESP32-C3 + Mobile] by ecandino

    drawing

    Description

    A couple of years ago I created StegoSecretS, a small cli used to encrypt and split a secret into multiple keys, using the Shamir's Secret Sharing algorithm.

    The idea is to re-implement the project using physical devices. One device alone will be useless, but when close together they can be used to decrypt the secret.

    On a practical side the user encrypts the secret with a mobile application. The same application is used to split the secret, and load the partial keys into different micro-controllers. Another user will be able to decrypt the secret only having at least N devices close together (using the application).

    I'm planning to use a couple of ESP32-C3 I bought, and build a very simple Android mobile application.

    Goals

    • Learn about Rust and micro-controllers (ESP32-C3)
    • Learn about mobile applications (Android and Kotlin)

    Resources