Giter VIP home page Giter VIP logo

mathanimation's People

Contributors

ambrosiogabe avatar janrupf avatar pixelrifts avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mathanimation's Issues

Clean up Image Object features

Currently you can't specify the following properties for Image Objects:

  • UV Coordinates

Implement these.

Additionally, when you load a texture right now it's possible for the stb_image to fail. There's a TODO in the code to propagate the errors to the end user. Implement this and then display a friendly error message to the user if the image fails to decode for whatever reason.

And finally, the texture cache only caches according to filepath. This can be confusing because what if you want to load the same image twice where one is sampled with GL_LINEAR and the other is sampled with GL_NEAREST? Well, the texture cache will just reuse whichever parameter was loaded first and won't change anything. Eww...

So, fix this up by adding additional features to cache invalidation. An image should be cached by at least the following:

  • Filepath
  • Sample Mode
  • Repeat Mode

and possibly more options if I think of them.

Add text indicators for different actions

Blender has a plugin that will write some text in the lower-left corner of the viewport to indicate which "actions" were just performed. For example, if you press 'G' it will show something like:

G - Move Mode

That slowly fades out. This is useful for tracking what a user is doing while watching, and it's also useful for a user who has no idea why a keypress randomly changed something. It would be nice to have this.

The text should show up for any action that occurs (not sure what constitutes an action: key combos only? Or extra stuff too?). If multiple actions are pressed in rapid succession the text should shift up and the new action should fade in below it. The oldest text should fade out after like 1.5-2 seconds, whatever feels right.

Maybe there should be a cap on the number of actions visible at any one time as well. So maybe like 5 actions at once max, or whatever looks the best.

Scripting needs more access to the C++ API

Some things are sorely needed in the scripting, here's a list:

  1. Math API for Vectors
  2. Access to internal structure of SVG objects
  3. Math API for general stuff (interpolation, beziers, etc)

Add support for textures

Add support for plain old images. It should have a dropdown to control whether it's sampled using linear or nearest sampling (or maybe others at some point too).

Add text formatting support

You should be able to format text inline with custom colors etc. Something like:

This is some text with <color = "blue">BLUE</color> text!!
This is some text with <i>ITALIC</i> text!
And this is some text with <bold><italic><color="yellow">multiple styles</color></italic></bold> on the text!!

Note that the formatting should support HTML style groups with the following:

  • Color group:
    • <color = CSS_STYLE_COLOR></color>
  • Italic group:
    • <i></i>
    • <italic></italic>
    • <italics></italics> # TODO: Should this be supported??
  • Bold group:
    • <b></b>
    • <bold></bold>
  • Underline group:
    • <underline></underline>
  • Strikethrough group:
    • <strikethrough></strikethrough>

Additional notes:

For group formatting (these things <></>):

  • It is case-insensitive
    • <b> == <B>
    • <bOlD> == <bold>
  • It is whitespace-insensitive (except for newlines)
    • < bold> == <bold> == < bold >
    • < bol
      d> != < bold>
    • All group openings must have a matching closing group
      • <bold><italic></italic> INVALID: No matching \</bold\>
    • Group openings/closing must respect order
      • <bold><italic> This is italic and bold</italic>, but this is just bold</bold> and this is not formatted
    • Group closing order must be the inverse of opening order
      • <bold><italic></italic></bold> OK: Close order matches open order bold -> italic <-> italic <- bold
      • <bold><italic></bold></italic> NOT OK: Close order is unmatched bold -> italic <-> bold <- italic

Any additional formatting rules will be written down here for documentation purposes. They will also be documented as part of this repositories documentation as they get added.

ffmpeg Linking Error

First of all, Thank you for your great work, It is really remarkable.
I followed your installation steps but unfortunately, I couldn't complete building the solution because of linking error with the FFmpeg library (I guess) as it popped up from the "Encoder.obj", as shown below:

5>Encoder.obj : error LNK2019: unresolved external symbol av_strerror referenced in function av_make_error_string
5>Encoder.obj : error LNK2019: unresolved external symbol av_frame_alloc referenced in function "bool __cdecl MathAnim::VideoWriter::pushFrame(struct MathAnim::Pixel *,int,struct MathAnim::VideoEncoder &)" (?pushFrame@VideoWriter@MathAnim@@YA_NPEAUPixel@2@HAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_frame_free referenced in function "void __cdecl MathAnim::VideoWriter::freeEncoder(struct MathAnim::VideoEncoder &)" (?freeEncoder@VideoWriter@MathAnim@@YAXAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_frame_get_buffer referenced in function "bool __cdecl MathAnim::VideoWriter::pushFrame(struct MathAnim::Pixel *,int,struct MathAnim::VideoEncoder &)" (?pushFrame@VideoWriter@MathAnim@@YA_NPEAUPixel@2@HAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_find_encoder referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_init_packet referenced in function "bool __cdecl MathAnim::VideoWriter::encodePacket(struct MathAnim::VideoEncoder &)" (?encodePacket@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_packet_unref referenced in function "bool __cdecl MathAnim::VideoWriter::encodePacket(struct MathAnim::VideoEncoder &)" (?encodePacket@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_alloc_context3 referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_free_context referenced in function "void __cdecl MathAnim::VideoWriter::freeEncoder(struct MathAnim::VideoEncoder &)" (?freeEncoder@VideoWriter@MathAnim@@YAXAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_parameters_from_context referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_parameters_to_context referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_open2 referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_send_frame referenced in function "bool __cdecl MathAnim::VideoWriter::encodePacket(struct MathAnim::VideoEncoder &)" (?encodePacket@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avcodec_receive_packet referenced in function "bool __cdecl MathAnim::VideoWriter::encodePacket(struct MathAnim::VideoEncoder &)" (?encodePacket@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_opt_set referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avio_open referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avio_close referenced in function "bool __cdecl MathAnim::VideoWriter::finalizeEncodingFile(struct MathAnim::VideoEncoder &)" (?finalizeEncodingFile@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avformat_free_context referenced in function "void __cdecl MathAnim::VideoWriter::freeEncoder(struct MathAnim::VideoEncoder &)" (?freeEncoder@VideoWriter@MathAnim@@YAXAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol avformat_new_stream referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avformat_alloc_output_context2 referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol avformat_write_header referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_interleaved_write_frame referenced in function "bool __cdecl MathAnim::VideoWriter::encodePacket(struct MathAnim::VideoEncoder &)" (?encodePacket@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_write_trailer referenced in function "bool __cdecl MathAnim::VideoWriter::finalizeEncodingFile(struct MathAnim::VideoEncoder &)" (?finalizeEncodingFile@VideoWriter@MathAnim@@YA_NAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_guess_format referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol av_dump_format referenced in function "bool __cdecl MathAnim::VideoWriter::startEncodingFile(struct MathAnim::VideoEncoder *,char const *,int,int,int,int,bool)" (?startEncodingFile@VideoWriter@MathAnim@@YA_NPEAUVideoEncoder@2@PEBDHHHH_N@Z)
5>Encoder.obj : error LNK2019: unresolved external symbol sws_freeContext referenced in function "void __cdecl MathAnim::VideoWriter::freeEncoder(struct MathAnim::VideoEncoder &)" (?freeEncoder@VideoWriter@MathAnim@@YAXAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol sws_getContext referenced in function "bool __cdecl MathAnim::VideoWriter::pushFrame(struct MathAnim::Pixel *,int,struct MathAnim::VideoEncoder &)" (?pushFrame@VideoWriter@MathAnim@@YA_NPEAUPixel@2@HAEAUVideoEncoder@2@@z)
5>Encoder.obj : error LNK2019: unresolved external symbol sws_scale referenced in function "bool __cdecl MathAnim::VideoWriter::pushFrame(struct MathAnim::Pixel *,int,struct MathAnim::VideoEncoder &)" (?pushFrame@VideoWriter@MathAnim@@YA_NPEAUPixel@2@HAEAUVideoEncoder@2@@z)
5>Animations\vendor\ffmpeg\build\lib\libavformat.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libavcodec.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libavdevice.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libavfilter.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libswresample.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libswscale.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
5>Animations\vendor\ffmpeg\build\lib\libavutil.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'

The FFmpeg library was built successfully
image

image

Windows build does not compile and suggestions

This isn't technically a bug. Its a readme related issue. Please add to the first-time compile these fixes.

  1. To actually run ./configure for ffmpeg you need to first open a normal msys2 terminal without the "Developer Command Prompt for VS 2022" and run pacman -S diffutils. It is complaining that it does not find a program called "cmp" which is a program that comes with diffutils
  2. Default make that comes with msys2 is faulty. It gave an error about awk syntax error even though everything was fine. To fix this you have to manually run pacman -S make to install make that is not default.
  3. You mention that it may take a long time but you can run in parallels using "-j{number of cores to run on}" in make. So you can suggest that if you want to speed it up and have more number of cores then just use `make -j{core count}". Also mention to keep the core count 2 less than the core count of the processor to give space for the OS and other programs. Running on multiple cores can speed up everything to such a huge degree.
  4. The user must have msbuild set or specify its exact path and then use the command. The msbuild ... wont work.

Hope you update these in the readme about installation for first time

dragging certain objects crashes the program

Describe the bug
Dragging some things crash the program. "No tree elements, impossible to drag"

To Reproduce
Steps to reproduce the behavior:

  1. Make a new project
  2. Drag any animation in the scene window
  3. Congrats. you crashed the program

Expected behavior
Maybe it should just say you cant drag it instead of crashing

Screenshots
MathAnimations_BqgRu3Imxi

Desktop (please complete the following information):

  • OS: Microsoft Windows 10 21H2
  • App Version: pull request number 48

Additional context
Add any other context about the problem here.

Add composite animations

Often times you need to add a group of animations that together. It's annoying placing all these on separate timeline tracks and then carefully aligning them etc. Maybe it's possible to add an AnimationGroup thing similar to Manim. Where you can add several different animations to this group then you can synchronize them or play them lagged.

The difficult part for this is how should the UI look? Should you be able to double click into an animation group on the timeline and then edit each animation individually in a sub-timeline kind of thing? Or should the animation inspector just show a bunch of animations and allow you to click them and then open a sub-menu?

I like the idea of the sub-timeline opening up, kind of like how code editor open the context of the file you're looking at a function inline. This sounds plausible but will require a lot of effort to add feature support on the timeline for this. Might be worth it though...

Polish timeline features

Right now creating animations and tracks is pretty annoying. Some ideas that may help streamline this process are:

  • Instead of having a panel of all animations, let the user right-click the track they want to add an animation to:
    • Once they right-click:
      • Open a popup with all animations grouped by animation type
      • Once they click an animation, place the animation on the track where they right-clicked
  • Make it so when you drag an animation above or below a track it:
    • Switches to the track you have it on if it exists
    • Creates a new track above or below if none exists
      • Also, the new track should only be finalized if the user drops the animation onto it. If the user doesn't complete the drop then the new track should disappear. So it should be a phantom track until the action is finalized
  • Auto shift animations when dragging
    • There should be two drag modes (possibly more if I think of them):
      • Push/Pull
        • When dragging animation clips, we should push animations to the right/left of it to make room
      • Trim
        • When dragging animation clips into another clip, we should trim the other clip
  • Magnet should snap to animations on tracks immediately above and below the current track (and possibly all animations, gotta do this one by feel)

Better GUI

All the features look amazing, but I have to say that the GUI looks not the greatest.

Some parts the GUI don't look exactly that bad, like the Timeline, but other parts like the title of sections, look awkward. Especially with the scroll boxes.

Scripting doesn't place custom SVGs correctly

If you create a script like the following:

local MathAnim = require("math-anim")

function quadTo(p0: Vec2, p1: Vec2, p2: Vec2, t: number): Vec2
    local x = (1.0 - t) * ((1.0 - t) * p0.x + t * p1.x) + t * ((1.0 - t) * p1.x + t * p2.x)
    local y = (1.0 - t) * ((1.0 - t) * -p0.y + t * -p1.y) + t * ((1.0 - t) * -p1.y + t * -p2.y)
    return {x = x, y = y}
end

function vecAdd(a: Vec2, b: Vec2): Vec2 
    return {
        x = a.x + b.x,
        y = a.y + b.y
    }
end

function vecSub(a: Vec2, b: Vec2): Vec2 
    return {
        x = a.x - b.x,
        y = a.y - b.y 
    }
end

-- This is automatically called when the object is generated
function generate(parent: MathAnim.AnimObject)
    local lineTri1: MathAnim.AnimObject = MathAnim.createAnimObject(parent)
    lineTri1:setName("Tri1")
    lineTri1:setPositionVec({x = 0, y = 0, z = 0})
    lineTri1:setColor({r = 120, g = 207, b = 114, a = 255})

    local p0 = {x = -2, y = 0}
    local p1 = {x = 0, y = 2}
    local p2 = {x = 2, y = 0}
    
    local p3 = {x = -2.1, y = 0.1}
    local p4 = {x = 0, y = 2.2}
    local p5 = {x = 2.1, y = 0.1}

    local numSegments = 40
    lineTri1.svgObject:beginPath(quadTo(p0, p1, p2, 0.0))
    for i=1, numSegments do 
        local t = i / numSegments;
        lineTri1.svgObject:lineTo(quadTo(p0, p1, p2, t))
    end

    lineTri1.svgObject:lineTo(quadTo(p3, p4, p5, 1.0))
    for i=numSegments - 1, 0, -1 do 
        local t = i / numSegments 
        lineTri1.svgObject:lineTo(quadTo(p3, p4, p5, t))
    end
    lineTri1.svgObject:closePath(true)

    local colors: {[number]: Vec4} = { }
    colors[1] = {r = 0, g = 0, b = 0, a = 255}
    colors[2] = {r = 255, g = 0, b = 0, a = 255}
    colors[3] = {r = 0, g = 255, b = 0, a = 255}
    colors[4] = {r = 0, g = 0, b = 255, a = 255}

    local newNumOffset = 7
    local tOffset = 1 / newNumOffset
    for i = 1, newNumOffset do 
        local quad: MathAnim.AnimObject = MathAnim.createAnimObject(parent)
        local t = i / newNumOffset
        quad:setName("Quad_"..i)
        quad:setColor(colors[math.fmod(i, 4) + 1])
        quad:setPositionVec({x = 0, y = -1, z = 0})

        local v0 = quadTo(p0, p1, p2, t - tOffset)
        local v1 = quadTo(p0, p1, p2, t)
        local v2 = quadTo(p3, p4, p5, t)
        local v3 = quadTo(p3, p4, p5, t - tOffset)

        local xCentroid1 =  (v0.x + v1.x + v2.x) / 3
        local xCentroid2 = (v1.x + v2.x + v3.x) / 3
        local xPos = (xCentroid1 + xCentroid2) / 2

        local yCentroid1 = (v0.y + v1.y + v2.y) / 3
        local yCentroid2 = (v1.y + v2.y + v3.y) / 3
        local yPos = (yCentroid1 + yCentroid2) / 2
        
        local pos: Vec2 = {x = xPos, y = yPos}

        v0 = vecAdd(v0, pos)
        v1 = vecAdd(v1, pos)
        v2 = vecAdd(v2, pos)
        v3 = vecAdd(v3, pos)

        quad.svgObject:beginPath(v0)
        quad.svgObject:lineTo(v1)
        quad.svgObject:lineTo(v2)
        quad.svgObject:lineTo(v3)
        quad.svgObject:closePath(true)
    end
end

it breaks very bad.

Cant install

When I run cmake.. i get this error

CMake Error at CMakeLists.txt:3 (project):
  Running

   'nmake' '-?'

  failed with:

   Het systeem kan het opgegeven bestand niet vinden


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "C:/Users/Senne/Desktop/mathanimator/MathAnimation/build/CMakeFiles/CMakeOutput.log".

Implement custom layout saving

The plumbing is all there, I just have to add an input box for when the user is saving the current layout as a new layout. This should just save the layout to a file of the same name located in the location listed in EditorLayout for custom layouts.

More hot keys

Add more hotkey support. Preferably have some Blender style hot keys for moving objects etc, and show some Blender style guidelines while moving objects etc.

Also fix gizmos.

Add dropdowns for different animation components and animation object components

The animation inspector and animation object inspector should probably be combined into one inspector.

Also, the inspectors should have dropdowns for different components (like a transform component, text component, move to component, etc) kind of like unity. These should be collapsible, but don't worry about reordering them or saving the collapsed state or anything right now.

failed to copy imgui.ini

Describe the bug
A clear and concise description of what the bug is.
Compiling error: 'Error copying file "C:/Users/Andrew/Desktop/MathAnimation/imgui.ini" to "C:/Users/Andrew/Desktop/MathAnimation/build/bin/Release"'

To Reproduce
Steps to reproduce the behavior:

  1. compile the project with cmake

Expected behavior
i expect it to be able to copy a file

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: Windows
  • App Version: pull request number 48

Additional context
Add any other context about the problem here.

Deltas for scene optimization are broken

Fix the deltas in the scene optimization. Right now skipping around the timeline recalculates everything from frame 0 which starts to lag stuff. Add back in the optimization where it can skip using a delta and only apply the necessary changes.

Add Linux Support

This is just to track progress on Linux support. Once support and README instructions get added for building on Linux, this issue can be resolved.

Scriptable animations

I want to be able to write custom scripts that create custom animations and can modify objects in the scene etc.

Switch from Hierarchical object structure to component structure

Right now there is one AnimObject that encompasses several different types of objects, and one Animation structure which encompasses several different kinds of animations. Also, the data is stored in unordered_maps which means iterating through the data is extremely slow.

Switch to a flat data layout, like an ECS, and remove the hierarchical structure in favor of a component based structure. This should speed things up with larger scenes and it should also make the code much more manageable.

Add undo/redo

Come up with a method for undo/redo. It should undo stuff in a way that makes sense to. For example:

  • If I move a timeline clip, undo to the last place it was before the move started
  • If I move an object, undo to the last position it was before it started
  • If I undo an object creation, delete the object and all it's sub-objects

Etc. Redo should likewise redo things in a sane fashion :)

Add CI

Make it easier for contributors. Add some continuous integration tools like:

  • Linting
  • Auto-formatting
  • Build checks
  • test suites

This Feature Request can be broken up into smaller Feature Requests as needed.

Add Browser/Chromebook Support

I doubt it'll happen, but if you could SOMEHOW make this possible to use on the web, you would be an absolute giga-chad. All I have is a Chromebook, which is wimpy and cannot handle such power.

Switch to JSON save files

Switch from binary save files to JSON save files so that data corruption is much less likely and can be fixed easily if it does happen.

I am dumb and I am trying to compile it

Where do I run this?:
REM NOTE This will take quite some time to compile REM To compile it faster you can use make -j{core count}instead ofmake` where
REM core count is 2 cores less than the number of cores available on your machine
pushd ./Animations/vendor/ffmpeg
./configure
--toolchain=msvc
--prefix=./build
--disable-doc
--arch=x86_64
--disable-x86asm
make
make install

REM Rename the files to .lib extension to make premake happy
mv ./build/lib/libavcodec.a ./build/lib/libavcodec.lib
mv ./build/lib/libavdevice.a ./build/lib/libavdevice.lib
mv ./build/lib/libavfilter.a ./build/lib/libavfilter.lib
mv ./build/lib/libavformat.a ./build/lib/libavformat.lib
mv ./build/lib/libavutil.a ./build/lib/libavutil.lib
mv ./build/lib/libswresample.a ./build/lib/libswresample.lib
mv ./build/lib/libswscale.a ./build/lib/libswscale.lib
popd`

in msys msys2 or in the vs cmd or where. What file. How. Thanks

3D Support

Everything 3D is broken right now. Please fix it and make it work well with everything else.

Default layout for first time opening editor

Add a default layout for users that open the editor for the first time. Ideally, it should scale somewhat depending on the screen size and be adaptable so you can save different layouts for future use.

Snapping in editor

Allow objects to snap to center points and edges etc of other objects while moving them with gizmos in the scene

LRU Cache is broken

The LRU cache has never worked right and is currently very broken. Fix it.

Add better caching for replacement transform animations

Replacement transform animations generate way too many intermediate SVGs that need to be cached. Instead, only create SVG caches for every 6-10 frames of the animation then interpolate between the sprites. Do some testing to see where a good balance lies for this, and then make sure while exporting the video all animations get rendered correctly everytime.

Create Scene with default settings

Creating a new scene should automatically contain:

  • A camera
  • A track
  • A hello world text object
  • A create animation drawing in the hello world object

Add bounding boxes to AnimObjects

Add bounding boxes to AnimObjects so that the Circumscribe animation can function appropriately and other functions can appropriately function. Also add parent + children bounding boxes that contain the bounding boxes for all the children + the current object which is the parent.

Make cached SVGs the same size as the output render (and half the size while editing)

Make sure that the cached SVGs are only as big as they need to be. So if the biggest SVG path that gets rendered to the final output is only 50px X 50px, make sure the cached SVG isn't any bigger than that.

While editing, the SVGs should be at 1/3, 1/2, or 2/3 the size depending on the viewport fidelity. Then during export it should be 1:1 where possible. If making the SVG 1:1 with the rendered size would result in too big of a texture, then clamp it at a reasonable cutoff value.

For example, if the final output is supposed to 8300px wide, that's ridiculous and I won't support that fully since GPUs have practical limits and the exported video is only 4K max right now. So instead of making the final output 8300px, clamp it to something like 2000px max.

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.