Crate turbine_reactive [] [src]

Design, Animate and Program Geometry

With other words: It is a type safe, dynamic, functional reactive library with homotopy maps.

This library uses ideas researched by Sven Nilsen of using homotopy maps to construct geometry. Control points flags and ragdoll engine is based on Cutout Pro's Elemento.

Motivation

This libray is intended for design, animating and programming geometry.

Function reactive programming is more fun when dynamic. This means the user can modify the behavior at runtime.

The use of homotopy maps is a promising technique for constructing geometry. A homotopy map is a continuous function that maps from N-dimension normalized coordinates to some M-dimensional space. See https://github.com/pistondevelopers/construct for more information.

The problem with dynamic frameworks for functional reactive programming is that there often is a tradeoff with making it nice to use at compile time. For example, when getting a reference to a spline, it is easy to accidentally use it with another type, e.g. a surface.

By separating memory by function types, it is possible to make the API type safe in Rust.

Features (work in progress)

  • Functional graph evaluation
  • Environment with time and delta time (allows formal reasoning about animation and motion)
  • Homotopy maps up to 4D
  • Colors (converts sRGB to linear color space for internal use)
  • Ragdoll physics
  • Fine tuned control over caching
  • Control point selection and locking

Goals

  • Create a modernized version of Cutout Pro's Elemento core for use in Turbine
  • Reusable in other game engines
  • Design for editing in VR
  • AI behavior trees (not decided yet)

Design

All data is stored in memory by their function type. This means one function can reference another function using an index, while keeping type safety at compile time.

Objects are created by combining functions.

Modules

color

Helper methods for colors

fns

Higher order structures for functions (including data).

ptr

Pointers to higher order structures.

Structs

Cache

Used to store temporary values of shared functions to speed up computation. By default, all function outputs that are referenced more than once are cached. To signal that some function output should be cached, None is stored in a hash map. When performing the first computation of that output, Some(value) is stored in the cache.

Environment

Used to set runtime behavior of external evaluation.

Physics

Stores intermediate data for physics simulation.

Reactor

Stores data for an reactive document.

Selection

Stores selection state.

Type Definitions

Bone1

Bone for 1D.

Bone2

Bone for 2D.

Bone3

Bone for 3D.

Bone4

Bone for 4D.

BoneRef1

Bone reference for 1D.

BoneRef2

Bone reference for 2D.

BoneRef3

Bone reference for 3D.

BoneRef4

Bone reference for 4D.

Color

Color stored as normalized [r, g, b, a].

ColorComponent

Color component type.

Spline1

Spline for scalars.

Spline2

Spline for 2D.

Spline3

Spline for 3D.

Spline4

Spline for 4D.

SplineRef1

Spline reference for scalar.

SplineRef2

Spline reference for 2D.

SplineRef3

Spline reference for 3D.

SplineRef4

Spline reference for 4D.

Surface1

Surface for 1D.

Surface2

Surface for 2D.

Surface3

Surface for 3D.

Surface4

Surface for 4D.

SurfaceRef1

Surface reference for scalar.

SurfaceRef2

Surface reference for 2D.

SurfaceRef3

Surface reference for 3D.

SurfaceRef4

Surface reference for 4D.