Skip to content

Commit

Permalink
Partially working animation along a camera path
Browse files Browse the repository at this point in the history
Still need to correct for world transform changes.
[CI BUILD]
  • Loading branch information
andybak committed Mar 17, 2023
1 parent b5813e2 commit ee9ab10
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 7 deletions.
@@ -0,0 +1,14 @@
Settings = {
description="Simple layer animation example"
}

Parameters = {
layerNumber={label="Layer Number", type="int", min=0, max=10, default=1},
speed={label="Animation Speed", type="float", min=0.01, max=10, default=1},
}

function Main()
transform = camerapath.sample(app.time * speed, true, true)
--layers.setTransform(layerNumber, transform)
layers.setPosition(layerNumber, transform.position)
end
Expand Up @@ -18,6 +18,6 @@ function Main()
}
rotation = {0, 0, 0}
--if layerNumber < layer.count then
layers.setPosition(layerNumber, position)
layers.setPosition(layerNumber, position)
--end
end
21 changes: 16 additions & 5 deletions Assets/Scripts/API/Lua/LuaManager.cs
Expand Up @@ -169,18 +169,25 @@ private void Update()
// Consume the queue of scripts that the FileListener reports have changed
foreach (var path in m_ScriptPathsToUpdate)
{
var scriptFilename = Path.GetFileName(path);
var scriptName = Path.GetFileNameWithoutExtension(scriptFilename);
var catMatch = TryGetCategoryFromScriptName(scriptName);
var scriptFilename = Path.GetFileNameWithoutExtension(Path.GetFileName(path));
var catMatch = TryGetCategoryFromScriptName(scriptFilename);
if (catMatch.HasValue)
{
var category = catMatch.Value;
var scriptName = scriptFilename.Substring(category.ToString().Length + 1);
LoadScriptFromPath(path);
if (catMatch != ApiCategory.BackgroundScript)
if (catMatch == ApiCategory.BackgroundScript)
{
if (m_ActiveBackgroundScripts.ContainsKey(scriptName))
{
InitScript(m_ActiveBackgroundScripts[scriptName]);
}
}
else
{
var activeScriptName = GetScriptNames(category)[ActiveScripts[category]];
ActiveScripts[category] = GetScriptNames(category).IndexOf(activeScriptName);
if (activeScriptName == scriptName.Substring(category.ToString().Length + 1))
if (activeScriptName == scriptName)
{
InitScript(GetActiveScript(category));
}
Expand Down Expand Up @@ -307,6 +314,10 @@ private string LoadScriptFromString(string scriptFilename, string contents, bool
script.Globals[LuaNames.IsExampleScriptBool] = isExampleScript;

Scripts[category][scriptName] = script;
if (m_ActiveBackgroundScripts.ContainsKey(scriptName))
{
m_ActiveBackgroundScripts[scriptName] = script;
}
InitScriptOnce(script);
}
return scriptName;
Expand Down
42 changes: 41 additions & 1 deletion Assets/Scripts/API/Lua/Wrappers/OpenBrushAppWrappers.cs
Expand Up @@ -263,7 +263,6 @@ public static Quaternion rotation
public static class LayerApiWrapper
{
public static int getActive => App.Scene.LayerCanvases.ToList().IndexOf(App.Scene.ActiveCanvas);
public static TrTransform getTransform(int index) => App.Scene.LayerCanvases.ToList()[index].Pose;
public static Vector3 getPosition(int index) => App.Scene.LayerCanvases.ToList()[index].Pose.translation;
public static void setPosition(int index, Vector3 position)
{
Expand All @@ -278,6 +277,13 @@ public static void setRotation(int index, Quaternion rotation)
tr.rotation = rotation;
App.Scene.LayerCanvases.ToList()[index].Pose = tr;
}
public static TrTransform getTransform(int index) => App.Scene.LayerCanvases.ToList()[index].Pose;
public static void setTransform(int index, TrTransform transform)
{
var tr = App.Scene.LayerCanvases.ToList()[index].Pose;
tr *= transform;
App.Scene.LayerCanvases.ToList()[index].Pose = tr;
}
public static void add() => ApiMethods.AddLayer();
public static void clear(int index) => ApiMethods.ClearLayer(index);
public static void delete(int index) => ApiMethods.DeleteLayer(index);
Expand Down Expand Up @@ -322,6 +328,40 @@ public static class CamerapathApiWrapper
public static void togglePreview() => ApiMethods.ToggleCameraPathPreview();
public static void delete() => ApiMethods.DeleteCameraPath();
public static void record() => ApiMethods.RecordCameraPath();
public static TrTransform sample(float time, bool loop=true, bool pingpong=false)
{
var widget = WidgetManager.m_Instance.GetCurrentCameraPath();
var cameraPath = widget?.WidgetScript.Path;
if (cameraPath == null) return TrTransform.identity;
var t = new PathT(time);
var maxT = new PathT(time);
maxT.Clamp(cameraPath.NumPositionKnots);
var origin = cameraPath.GetPosition(new PathT(0));
if (t > maxT && loop)
{
if (pingpong)
{
int numLoops = Mathf.FloorToInt(t.T / maxT.T);
if (numLoops % 2 == 0)
{
t = new PathT(t.T % maxT.T);
}
else
{
t = new PathT(maxT.T - (t.T % maxT.T));
}
}
else
{
t = new PathT(t.T % maxT.T);
}
}
var tr = TrTransform.TR(
cameraPath.GetPosition(t) - origin,
cameraPath.GetRotation(t)
);
return tr;
}
}

[MoonSharpUserData]
Expand Down

0 comments on commit ee9ab10

Please sign in to comment.