The goal of this challenge is to create an isometric, decorated scene in which the character can move around the objects in the room.

Overview

Sophya Rust Challenge

The goal of this challenge is to create an isometric, decorated scene in which the character can move around the objects in the room.

The scene should:

  • be in 2d,
  • use all of the assets at least twice, in two different orientations each
    • use the asset details to draw programatic shadows underneath each asset
  • have 3d collision, driven by the collider definitions in the assets
    • i.e. the character will stop walking against the objects in the room.
  • have a debug menu to enable visualization of the 3d colliders
  • use WASD or arrow keys to control the character
    • W should go North
    • D should go East
    • etc.

The code should:

  • follow an ECS architectural design, with the hecs ecs being the primary state and data store of the scene.
  • use macroquad for any windowing, input, and rendering.
  • use rapier3d for 3d physics state management and collision detection
  • use egui for the immediate mode ui. (with egui-macroquad to make things easier)
  • be well organized, with distinct sepration of concerns and single responsibilities.
  • safe (in rust terms)

Utilities provided:

  • matricies and utility functions to convert between 2d and isometric space.

Safe Assumptions / Tips:

  • the center of map image should be used as the origin for the isometric space.
  • rapier3d doesn't love large numbers / spaces, you may have to scale data in/out to make it perform well.
  • the character won't animate.
  • the walls won't have collision.

Asset Format

Coordinate Definitions:

  • 2d space: +x is right, +y is up.

  • isometric space: +x is diagonally down and right, +y is diagonally down and left

  • isometric cardinal directions:

    • N is up and right (-y)
    • E is down and right (+x)
    • S is down and left (+y)
    • W is up and left (-x)
  • asset

    • orientations: there are the possible rotations of the objects, facing either N, E, S, or W,
      • images: each orientation has at least 1 image.
        • transform: transform data, in 2d space, the origin of the image is the center
          • position
          • scale
          • frontPoint: this defines the front most point of the object, useful for depth sorting the objects.
          • type: image
          • primitives: these are the sub components of the images, In this case, 3d colliders, and shadows to render
            • shadow type
              • shape: positional data in isometric space relative to the origin of the image
            • collider type
              • shape: also position data in the isometric space, has a height value for accurate collider creation

Result

Demo video

You might also like...
A multi-targets ping tool and library, which supports 10,000 packets/second, accurate latency

mping-rs a multi-targets ping tool, which supports 10,000 packets/second, accurate latency. 一个高频ping工具,支持多个目标。 正常的ping一般用来做探测工具,mping还可以用来做压测工具。 Go版本:

Transforms UDP stream into (fake) TCP streams that can go through Layer 3 & Layer 4 (NAPT) firewalls/NATs.
Transforms UDP stream into (fake) TCP streams that can go through Layer 3 & Layer 4 (NAPT) firewalls/NATs.

Phantun A lightweight and fast UDP to TCP obfuscator. Table of Contents Phantun Latest release Overview Usage 1. Enable Kernel IP forwarding 2. Add re

📊 Collect cloud usage data, so that it can be combined with impact data of Boavizta API.
📊 Collect cloud usage data, so that it can be combined with impact data of Boavizta API.

cloud-scanner Collect aws cloud usage data, so that it can be combined with impact data of Boavizta API. ⚠ Very early Work in progress ! At the moment

「🧱」Test a list of payloads and see if you can bypass it
「🧱」Test a list of payloads and see if you can bypass it

「 🧱 」About TTWAF TTWAF, or Test This WAF, is a Web Application Firewall (WAF) bypass testing tool. You can test a list of payloads like XSS, LFI, RCE

Implementation of the Docker Registry HTTP API V2 in Rust, that can act as a proxy to other registries

Docker registry server and proxy (I'm bad at creating catchy names, but this one is good enough.) This project aims to implement a Docker Registry HTT

Tiny CLI application in rust to scan ports from a given IP and find how many are open. You can also pass the amount of threads for that scan

Port Scanner A simple multi-threaded port scanner written in Rust. Usage Run the port scanner by providing the target IP address and optional flags. $

A tool to export TiDB database data to files in cases where the TiDB server can't be restored.
A tool to export TiDB database data to files in cases where the TiDB server can't be restored.

tidb-exporter TiDB uses RocksDB as default storage engine(in fact, TiKV uses it). tidb-exporter can export data from pure RocksDB data files even when

Rust crate providing a variety of automotive related libraries, such as communicating with CAN interfaces and diagnostic APIs

The Automotive Crate Welcome to the automotive crate documentation. The purpose of this crate is to help you with all things automotive related. Most

A command-line tool which can move CloudFormation resources between stacks
A command-line tool which can move CloudFormation resources between stacks

cfn-teleport A command-line tool which can move CloudFormation resources between stacks. Installation On a Mac you can install via Homebrew: brew inst

The ray tracer challenge in rust - Repository to follow my development of
The ray tracer challenge in rust - Repository to follow my development of "The Raytracer Challenge" book by Jamis Buck in the language Rust

The Ray Tracer Challenge This repository contains all the code written, while step by implementing Ray Tracer, based on the book "The Ray Tracer Chall

Planetoid is a toy project to demonstrate and learn several technologies. The goal is to create a little multiplayer asteriod game clone.
Planetoid is a toy project to demonstrate and learn several technologies. The goal is to create a little multiplayer asteriod game clone.

Planetoid is a toy project to demonstrate and learn several technologies. The goal is to create a little multiplayer asteriod game clone.

This is an online game in which you program your character and he fights with other players

Game for programmers The goal of this project is to create a simple game for programmers. The essence of the game Each player has his own character th

The Dutch secret service (AIVD) has a yearly puzzle challenge around Christmas
The Dutch secret service (AIVD) has a yearly puzzle challenge around Christmas

AIVD kerstpuzzel 2021 18 solver The Dutch secret service (AIVD) has a yearly puzzle challenge around Christmas, called the 'AIVD kerstpuzzel'. This re

Hypergraph is data structure library to create a directed hypergraph in which a hyperedge can join any number of vertices.

Hypergraph is data structure library to create a directed hypergraph in which a hyperedge can join any number of vertices.

A rust proc-macro which allows for reading and writing to remote objects through a generated enum

Remote-Obj A rust proc-macro which allows for reading and writing fields/variants of (possibly nested) remote objects by generating a single enum whic

Posts CAP alerts to a chat room
Posts CAP alerts to a chat room

CAP-CHAT Sends CAP (Weather, etc) Warnings to Chat. Options Option Description Default --cap URL for the Atom/RSS feed to CAP alerts (can have multipl

Just a bot for Neovim's Matrix room(s)

nvim-matrix-bot Currently just supports replying to messages with :h some_doc or similar in them with a link to the docs on Neovim's website. Plan i

Emulates an Edge hardware-based room sensor client purely as a CLI application

ambi_mock_client Usage You must have Rust installed to build ambi_mock_client. You can find documentation on installing Rust here. Using cargo run c

AI plays a small escape room game, written in rust
AI plays a small escape room game, written in rust

Escape AI AI learns escape a room. This is a rust based implementation of a genetic algorithm and reinforcement learning simulation that trains an AI

Owner
Ivan Reshetnikov
Engineering software since 1886
Ivan Reshetnikov
A library for writing type-safe Durable Objects in Rust.

do-proxy A library for writing type-safe Durable Objects (DOs) in Rust. With do-proxy you can: Easily write type-safe APIs for Durable Objects. Abstra

Fisher Darling 12 Dec 4, 2022
🔍 Fully-featured metrics collection agent for First Tech Challenge competitions. Supports Prometheus.

Scout Scout is a fully-featured free and open source metrics collector for FTC competitions. The project is licensed under the GNU LGPLv3 license. Fea

hivemind 3 Oct 24, 2023
Reverse proxy for HTTP microservices and STDIO. Openfass watchdog which can run webassembly with wasmer-gpu written in rust.

The of-watchdog implements an HTTP server listening on port 8080, and acts as a reverse proxy for running functions and microservices. It can be used independently, or as the entrypoint for a container with OpenFaaS.

yanghaku 7 Sep 15, 2022
ZeroNS: a name service centered around the ZeroTier Central API

ZeroNS: a name service centered around the ZeroTier Central API ZeroNS provides names that are a part of ZeroTier Central's configured networks; once

ZeroTier, Inc. 327 Dec 20, 2022
A super minimal wrapper around unix sockets for IPC on top of tokio.

tokio-unix-ipc This crate implements a minimal abstraction over UNIX domain sockets for the purpose of IPC on top of tokio.

Armin Ronacher 26 Nov 18, 2022
MASQ Network 121 Dec 20, 2022
A library to quickly create OAuth2.1 compliant servers from scratch.

oauth21-server A library to easily create an OAuth 2.1 compliant authorization server. The motivation to develop this library comes from the fact that

Revanth Pothukuchi 3 Mar 14, 2022
A tcp proxy server/client which exchange the data in temp files

ftcp A tcp proxy server/client which exchange the data in temp files 通过在临时文件中交换数据来进行TCP代理的一个服务端/客户端 学校内网中有针对教学楼的防火墙导致教室电脑难以上网( 但学校内建有公共ftp服务器,因此就有了这个借

Daile Liu 2 Feb 17, 2022
DDoS Utility which distributes the available resources across different targets

DDoS utility for education purposes only. Allows to specify a number of targets inside a json file and send a tremendous amount of request. The requests are distributed across the specified targets, to allow keeping as much targets down as possible, while limiting the necessary resources.

l3montree 3 Mar 30, 2022
An app which reads data from a serial port and serves it on a TCP port.

serial-to-tcp An app which reads data from a serial port and serves it on a TCP port. How to use Clone this repo and build the app as outlined below (

Mr. E 3 Oct 21, 2022