This is the repository for the group project assignment in the course "Project in Introduction to Computer Science" (DD1396), by the Inda21plusplus group.

Overview

Project-Delta

This is the repository for the group project assignment in the course "Project in Introduction to Computer Science" (DD1396), by the Inda21plusplus group.

How to run the project

1. Clone

Clone repo using git clone

2. Run

Run project using cargo run

3. Keybindings

WASD - Move in the plane created by camera pos and forward viewing vector

Space - Acend

Ctrl - Decend

Q - Enable Cursor mode

E - Enbale Camera mode

How the development process will look

The plan

The plan is to have a clean and structured approach to development in order to make everyones lives easier.

Merging requirements

To be able to merge into main (ex master) you have to create a branch do your work an then push the branch upstream and create a Pull Request. To keep track of what everyone is doing we will also base our work on issues where you create an issue (Add gravity to physics component, for example) with respective lables (Enhancement and Game Engine fits this issue). In order to be able to merge the code into the main branch the PR has to be able to merge (of course), pass the workflow test (cargo check, -test, -build, -clippy) and pass reviews from two other project members. Code reviews will ensure we keep our code efficient, readable, and clean. Merging directly into the main branch will not work, You can of course make local changes in main branch but you will not be able to push them.

Git commits

Try to keep git commits small and concise. This makes following commits and progress easier in adition to making pull requests easier to review.

Documentation

We should try to document as much code as possible to make it easier for others to understand the code and make it easy to circle back to.

This is just an idea

This is just preliminary and can of course change.

Comments
  • Create a basic ECS

    Create a basic ECS

    First parts before closing #5

    Features to implement before merging this PR into main

    • [x] Keep track of entities
    • [x] Store components
    • [x] Query for (multiple) components
    • [x] Iterate over all entities matching a query
    • [x] Resources
    ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 5
  • First commit

    First commit

    Closes #1, #2 This is the first official commit to the project where I added the base crates for the rust development process and GitHub Workflows folder with a base action to check the rust code.

    If you have any ideas or opinions, please share them.

    Enhancement🚀 Game Engine👨‍💻 IDE🖥️ 
    opened by ollisco 5
  • Integrate the ECS and Physics

    Integrate the ECS and Physics

    Depends on #37

    Integrates the ECS with the physics.

    The way it currently works is that game_engine::physics_systems::update takes a &mut ecs::World and runs a physics step on all entities with a common::Transform, physics::Rigidbody, and optionally physics::Collider. It also looks for a physics::Gravity and game_engine::Time as a resource.

    Game Engine👨‍💻 ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 1
  • ECS - Query for Combinations of Entities

    ECS - Query for Combinations of Entities

    (Depends on #28)

    Add functionality to query for all combinations of tuples of entities.

    For example: given the entities A, B, and C, yield (A, B), (A, C), (B, C), allowing for mutable access to them.

    I ඞpect this will be needed before integrating the ECS with the physics

    ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 1
  • ECS - Command Buffers

    ECS - Command Buffers

    Add a way to buffer some actions to be performed on the World at a later stage when possible.

    This will make it possible to for example remove certain entities while looping over them.

    Todo:

    • [x] Command to spawn & despawn entities
    • [x] Command to add components to entities
    • [x] Add a way to add components to newly spawned entities
    • [x] Add a way to get a handle to the new Entity being spawned
    ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 1
  • Type safe ECS queries

    Type safe ECS queries

    This PR partially covers the second part of #5

    • [x] Some way of getting access to components in a type safe way from Rust.
    • [x] Optionally get handle to Entity with query
    ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 1
  • ECS - Optional Queries

    ECS - Optional Queries

    Add support for specifying queries that match even entities that don't have a given component, but still get access to it if it does.

    Current syntax looks like this:

    query_iter!(world, (a: A, b: Option<B>) => {
        // a: &A
        // b: Option<&B>
    });
    query_iter!(world, (a: mut Option<A>) => {
        // a: Option<&mut A>
    });
    
    opened by mathiasmagnusson 0
  • Type safe ECS queries

    Type safe ECS queries

    This PR partially covers the second part of #5

    • [x] Some way of getting access to components in a type safe way from Rust.
    • [x] Optionally get handle to Entity with query
    ECS🏴󠁥󠁣󠁳󠁿 
    opened by mathiasmagnusson 0
  • Added phong shading and support for a UI-controlled viewport + other changes

    Added phong shading and support for a UI-controlled viewport + other changes

    • Added Phong shading (or at least the ambient/diffuse components of it) using vertex normals.
    • Added deferred rendering and proper point light support (with light volumes)
    • Added support for a UI-controlled viewport
    • Modified Renderer to compartmentalize the actual drawing into its own World struct that can be duplicated etc.
    • Changed the ModelManager to instead be effectively a writable "guard" for the backing GPU-buffers, so that on drop all pending changes are automatically flushed to the GPU.
    • Fixed a bug where vertex/index buffers were overwritten with new data before the draws were actually performed, resulting in the final draw using vastly wrong vertex and index data.

    Closes #18 Closes #30

    Renderer✒️ 
    opened by TerraDOOM 0
  • Split up workflows to different files

    Split up workflows to different files

    We could maybe split up workflows so that everything is not in the same file.

    Originally posted by @ollisco in https://github.com/inda21plusplus/Project-Delta/issues/17#issuecomment-1069448881

    wontfix CI/CD 💿 
    opened by mathiasmagnusson 0
  • Engine asset management

    Engine asset management

    The engine needs a somewhat robust asset management system to allow for streamlined loading/unloading, also to make the rendering inputs easier to handle for the user (i.e. the IDE), exact specifications TBD

    Enhancement🚀 Game Engine👨‍💻 
    opened by TerraDOOM 0
  • Create / Integrate with a scripting language

    Create / Integrate with a scripting language

    I think using webassembly as a target for the scripting language and running it with wasmtime is a nice way to go about it.

    They have a short tutorial here https://docs.wasmtime.dev/lang-rust.html and it seems quite nice to use.

    Using webassembly would keep the door open to script a game using most modern low-level languages (and then some) while also allowing us to create an own scripting language if we wish (and have the time).

    Enhancement🚀 Game Engine👨‍💻 
    opened by mathiasmagnusson 1
  • Add simple Physics

    Add simple Physics

    Simple Physics, including:

    • Position
    • Velocity
    • Acceleration
    • Colisions (Elastic and inelastic)

    Features to implement before merging #25 into main

    • [x] Sphere - Sphere
    • [x] Box - Sphere
    • [x] Box - Box

    Features to add later

    • [x] Raycast sphere
    • [x] Raycast box
    • [x] Friction
    • [x] Angular velocity
    • [x] ECS integration

    Features that would be nice to have

    • [ ] Convex mesh colliders
    • [ ] Concave mesh colliders
    Enhancement🚀 Game Engine👨‍💻 
    opened by ollisco 0
Releases(v1.0.0)
  • v1.0.0(May 20, 2022)

    What's Changed

    • First commit by @ollisco in https://github.com/inda21plusplus/Project-Delta/pull/3
    • Improve CI by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/21
    • Cleanup wpgu for PR by @ollisco in https://github.com/inda21plusplus/Project-Delta/pull/22
    • Setup basic window functionality by @ollisco in https://github.com/inda21plusplus/Project-Delta/pull/7
    • Create a basic ECS by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/17
    • Add escape as quit key by @ollisco in https://github.com/inda21plusplus/Project-Delta/pull/26
    • Type safe ECS queries by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/32
    • Rename ide to example by @DreamplaySE in https://github.com/inda21plusplus/Project-Delta/pull/34
    • ECS - Command Buffers by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/28
    • ECS - Query for Combinations of Entities by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/33
    • Added phong shading and support for a UI-controlled viewport + other changes by @TerraDOOM in https://github.com/inda21plusplus/Project-Delta/pull/29
    • Vinlag/phx by @VincentLagerros in https://github.com/inda21plusplus/Project-Delta/pull/25
    • ECS - Optional Queries by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/37
    • Integrate the ECS and Physics by @mathiasmagnusson in https://github.com/inda21plusplus/Project-Delta/pull/36

    New Contributors

    • @ollisco made their first contribution in https://github.com/inda21plusplus/Project-Delta/pull/3
    • @DreamplaySE made their first contribution in https://github.com/inda21plusplus/Project-Delta/pull/34
    • @TerraDOOM made their first contribution in https://github.com/inda21plusplus/Project-Delta/pull/29
    • @VincentLagerros made their first contribution in https://github.com/inda21plusplus/Project-Delta/pull/25

    Full Changelog: https://github.com/inda21plusplus/Project-Delta/commits/v1.0.0

    Source code(tar.gz)
    Source code(zip)
    release-linux.zip(5.32 MB)
    Release-mac.zip(3.81 MB)
    Release-windows.zip(4.44 MB)
Owner
null
Blackjack is a procedural modelling application, following the steps of great tools like Houdini or Blender's geometry nodes project

Blackjack Your Rusty ?? procedural 3d modeler Blackjack is a procedural modelling application, following the steps of great tools like Houdini or Blen

null 1.1k Jan 3, 2023
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
Rust Programming Fundamentals - one course to rule them all, one course to find them...

Ultimate Rust Crash Course This is the companion repository for the Ultimate Rust Crash Course published online, presented live at O'Reilly virtual ev

Nathan Stocks 1.3k Jan 8, 2023
Coordination repository of the Game Development Working Group

Rust Game Development Working Group ??️ The game development working group's main purpose is to make Rust a first-class option for game developers. Wh

Rust game development working group 448 Jan 2, 2023
GZTime's GGOS for OS course project.

GZTime's GG OS OS course project. The basic development of this course operating system has been completed. Using JetBrainsMono as console font. Usage

GZTime 15 Dec 30, 2022
C-like language compiler, the final project of ZJU Compiler Principle course

cc99 cc99 (not cc98.org) is a C-like language compiler, which is the final project of ZJU Compiler Principle course. It supports many of the C99 langu

Ralph 37 Oct 18, 2022
An NTP implementation in Rust, supported by Internet Security Research Group's Prossimo project.

NTPD-rs NTPD-rs is an implementation of NTP completely written in Rust, with a focus on exposing a minimal attack surface. The project is currently in

Prossimo (ISRG) 302 Jan 4, 2023
Sky Island Showdown: CSE 125 Spring 2023 Group 5 Project, a Multiplayer, 3D Game

As the Wind Blows ?? Project for CSE 125 Spring 2023, Group 5 Homepage » As the Wind Blows is a 3D multiplayer game, created with Rust, WGPU, and a to

null 5 May 1, 2023
The best Intermediate Rust course out there!

Ultimate Rust 2: Intermediate Concepts This is the companion repository for the Ultimate Rust 2: Intermediate Concepts (the followup to the popular Ul

Nathan Stocks 155 Jan 4, 2023
Following along with the Geometry Processing with Intrinsic Triangulations course in Rust.

Intrinsic Triangulations in Rust In this repo is code I wrote following along with the Nicholas Sharp, Mark Gillespie, Keenan Crane's course on geomet

Lukas Hermann 8 Nov 16, 2021
My code for the terra.academy course on CosmWasm smart contracts

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understan

Alex Incerti 0 Nov 7, 2021
P523 is a classic compiler course taught by R. Kent Dybvig.

P523 is a classic compiler course taught by R. Kent Dybvig. This repo implements the course using Rust, provides a framework to help you master P523.

Sirius Demon 44 Dec 26, 2022
Practice repo for learning Rust. Currently going through "Rust for JavaScript Developers" course.

rust-practice ?? Practice repo for learning Rust. Directories /rust-for-js-dev Files directed towards "Rust for JavaScript Developers" course. Thank y

Sammy Samkough 0 Dec 25, 2021
An upper-level course for CS majors on formal languages theory and compilers.

CS4100 Introduction to Formal Languages and Compilers Spring 2022 An upper-level course for CS majors on formal languages theory and compilers. Topics

null 2 May 28, 2022
A commmand line tool for uploading homework coded on the dcloud server onto specific google drive course folders.

A commmand line tool for uploading homework coded on the dcloud server onto specific google drive course folders.

Daniel Kogan 2 Sep 8, 2022
A graphics engine that I made in rust for my high school graphics course.

A graphics engine that I made in rust for my high school graphics course.

Mohammad Khan 1 May 29, 2022
A tool & library to help you with the compiler course.

Compiler Course Helper Support: eliminate left recursion (require grammar with no cycles or ϵ-production) calculate nullable, first sets, follow, sets

水夕 4 May 2, 2022
Free Rust 🦀 course in English 🇬🇧

Learn Rust ?? Free Rust ?? course in English ???? This course was inspired by Dcode Before starting to learn a programming language, you need to under

Skwal 10 Jul 5, 2022
Rust Crash Course, by BPB Publications

Rust Crash Course Grasp the fundamentals of programming in Rust and put your knowledge to use. This is the repository for Rust Crash Course ,published

BPB Online 9 Nov 26, 2022
A simple tomasulo simulator written in Rust for the course Computer Architecture.

Tomasulo Simulator This is a Tomasulo simulator written in Rust for the course Computer Architecture. Two Demo programs are tested in the simulator, w

GZTime 5 Dec 28, 2022