Updated todo list. Enforced execution order of animation blocks - they now execute in layer order, from top to bottom.
This commit is contained in:
parent
de1a9474f0
commit
f1936a016c
|
@ -83,20 +83,26 @@ Win32StringLength(char* String)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal s32
|
internal s32
|
||||||
Win32ConcatStrings(s32 ALen, char* A, s32 BLen, char* B, s32 DestLen, char* Dest)
|
Win32ConcatStrings(s32 ALength, char* A, s32 BLength, char* B, s32 DestLength, char* Dest)
|
||||||
{
|
{
|
||||||
char* Dst = Dest;
|
char* Dst = Dest;
|
||||||
char* AAt = A;
|
char* AAt = A;
|
||||||
for (s32 a = 0; a < ALen; a++)
|
int ALengthToCopy = ALength < DestLength ? ALength : DestLength;
|
||||||
|
for (s32 a = 0; a < ALength; a++)
|
||||||
{
|
{
|
||||||
*Dst++ = *AAt++;
|
*Dst++ = *AAt++;
|
||||||
}
|
}
|
||||||
char* BAt = B;
|
char* BAt = B;
|
||||||
for (s32 b = 0; b < BLen; b++)
|
int DestLengthRemaining = DestLength - (Dst - Dest);
|
||||||
|
int BLengthToCopy = BLength < DestLengthRemaining ? BLength : DestLength;
|
||||||
|
for (s32 b = 0; b < BLengthToCopy; b++)
|
||||||
{
|
{
|
||||||
*Dst++ = *BAt++;
|
*Dst++ = *BAt++;
|
||||||
}
|
}
|
||||||
return Dst - Dest;
|
int DestLengthOut = Dst - Dest;
|
||||||
|
int NullTermIndex = DestLengthOut < DestLength ? DestLengthOut : DestLength;
|
||||||
|
Dest[NullTermIndex] = 0;
|
||||||
|
return DestLengthOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
|
@ -341,13 +341,25 @@ UPDATE_AND_RENDER(UpdateAndRender)
|
||||||
State->AnimationSystem.LastUpdatedFrame = CurrentFrame;
|
State->AnimationSystem.LastUpdatedFrame = CurrentFrame;
|
||||||
r32 FrameTime = CurrentFrame * State->AnimationSystem.SecondsPerFrame;
|
r32 FrameTime = CurrentFrame * State->AnimationSystem.SecondsPerFrame;
|
||||||
|
|
||||||
|
u32 CurrentBlocksMax = State->AnimationSystem.LayersCount;
|
||||||
|
b8* CurrentBlocksFilled = PushArray(&State->Transient, b8, CurrentBlocksMax);
|
||||||
|
GSZeroArray(CurrentBlocksFilled, b8, CurrentBlocksMax);
|
||||||
|
animation_block* CurrentBlocks = PushArray(&State->Transient, animation_block, CurrentBlocksMax);
|
||||||
|
|
||||||
for (u32 i = 0; i < State->AnimationSystem.Blocks.Used; i++)
|
for (u32 i = 0; i < State->AnimationSystem.Blocks.Used; i++)
|
||||||
{
|
{
|
||||||
gs_list_entry<animation_block>* BlockEntry = State->AnimationSystem.Blocks.GetEntryAtIndex(i);
|
gs_list_entry<animation_block>* BlockEntry = State->AnimationSystem.Blocks.GetEntryAtIndex(i);
|
||||||
if (EntryIsFree(BlockEntry)) { continue; }
|
if (EntryIsFree(BlockEntry)) { continue; }
|
||||||
animation_block Block = BlockEntry->Value;
|
animation_block Block = BlockEntry->Value;
|
||||||
if (CurrentFrame < Block.Range.Min || CurrentFrame > Block.Range.Max) { continue; }
|
if (CurrentFrame < Block.Range.Min || CurrentFrame > Block.Range.Max) { continue; }
|
||||||
|
CurrentBlocksFilled[Block.Layer] = true;
|
||||||
|
CurrentBlocks[Block.Layer] = Block;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (s32 Layer = CurrentBlocksMax - 1; Layer >= 0; Layer--)
|
||||||
|
{
|
||||||
|
if (!CurrentBlocksFilled[Layer]) { continue; }
|
||||||
|
animation_block Block = CurrentBlocks[Layer];
|
||||||
for (u32 j = 0; j < State->ActiveAssemblyIndecies.Used; j++)
|
for (u32 j = 0; j < State->ActiveAssemblyIndecies.Used; j++)
|
||||||
{
|
{
|
||||||
gs_list_handle AssemblyHandle = *State->ActiveAssemblyIndecies.GetElementAtIndex(j);
|
gs_list_handle AssemblyHandle = *State->ActiveAssemblyIndecies.GetElementAtIndex(j);
|
||||||
|
|
|
@ -151,12 +151,12 @@ TestPatternTwo(assembly* Assembly, r32 Time)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Assembly->Colors[LED.Index] = {};
|
//Assembly->Colors[LED.Index] = {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Assembly->Colors[LED.Index] = {};
|
//Assembly->Colors[LED.Index] = {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,13 +14,44 @@ struct win32_dll_refresh
|
||||||
FILETIME LastWriteTime;
|
FILETIME LastWriteTime;
|
||||||
HMODULE DLL;
|
HMODULE DLL;
|
||||||
|
|
||||||
b32 IsValid;
|
bool IsValid;
|
||||||
|
|
||||||
char SourceDLLPath[MAX_PATH];
|
char SourceDLLPath[MAX_PATH];
|
||||||
char WorkingDLLPath[MAX_PATH];
|
char WorkingDLLPath[MAX_PATH];
|
||||||
char LockFilePath[MAX_PATH];
|
char LockFilePath[MAX_PATH];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
internal int
|
||||||
|
Win32DLLStringLength(char* String)
|
||||||
|
{
|
||||||
|
char* At = String;
|
||||||
|
while (*At) { At++; };
|
||||||
|
return At - String;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal int
|
||||||
|
Win32DLLConcatStrings(int ALength, char* A, int BLength, char* B, int DestLength, char* Dest)
|
||||||
|
{
|
||||||
|
char* Dst = Dest;
|
||||||
|
char* AAt = A;
|
||||||
|
int ALengthToCopy = ALength < DestLength ? ALength : DestLength;
|
||||||
|
for (s32 a = 0; a < ALength; a++)
|
||||||
|
{
|
||||||
|
*Dst++ = *AAt++;
|
||||||
|
}
|
||||||
|
char* BAt = B;
|
||||||
|
int DestLengthRemaining = DestLength - (Dst - Dest);
|
||||||
|
int BLengthToCopy = BLength < DestLengthRemaining ? BLength : DestLength;
|
||||||
|
for (s32 b = 0; b < BLengthToCopy; b++)
|
||||||
|
{
|
||||||
|
*Dst++ = *BAt++;
|
||||||
|
}
|
||||||
|
int DestLengthOut = Dst - Dest;
|
||||||
|
int NullTermIndex = DestLengthOut < DestLength ? DestLengthOut : DestLength;
|
||||||
|
Dest[NullTermIndex] = 0;
|
||||||
|
return DestLengthOut;
|
||||||
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
GetApplicationPath(system_path* Result)
|
GetApplicationPath(system_path* Result)
|
||||||
{
|
{
|
||||||
|
@ -81,14 +112,14 @@ InitializeDLLHotReloading(char* SourceDLLName,
|
||||||
ExePath.Path = (char*)VirtualAlloc(NULL, ExePath.PathLength, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
ExePath.Path = (char*)VirtualAlloc(NULL, ExePath.PathLength, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
||||||
GetApplicationPath(&ExePath);
|
GetApplicationPath(&ExePath);
|
||||||
|
|
||||||
Win32ConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
Win32DLLConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
||||||
Win32StringLength(SourceDLLName), SourceDLLName,
|
Win32DLLStringLength(SourceDLLName), SourceDLLName,
|
||||||
MAX_PATH, Result.SourceDLLPath);
|
MAX_PATH, Result.SourceDLLPath);
|
||||||
Win32ConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
Win32DLLConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
||||||
Win32StringLength(WorkingDLLFileName), WorkingDLLFileName,
|
Win32DLLStringLength(WorkingDLLFileName), WorkingDLLFileName,
|
||||||
MAX_PATH, Result.WorkingDLLPath);
|
MAX_PATH, Result.WorkingDLLPath);
|
||||||
Win32ConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
Win32DLLConcatStrings(ExePath.IndexOfLastSlash, ExePath.Path,
|
||||||
Win32StringLength(LockFileName), LockFileName,
|
Win32DLLStringLength(LockFileName), LockFileName,
|
||||||
MAX_PATH, Result.LockFilePath);
|
MAX_PATH, Result.LockFilePath);
|
||||||
|
|
||||||
Win32Free((u8*)ExePath.Path, ExePath.PathLength);
|
Win32Free((u8*)ExePath.Path, ExePath.PathLength);
|
||||||
|
|
11
todo.txt
11
todo.txt
|
@ -75,10 +75,15 @@ Ground Up Reengineering
|
||||||
x zoom in and out
|
x zoom in and out
|
||||||
- blending between animation
|
- blending between animation
|
||||||
- layers
|
- layers
|
||||||
- display more than one layer
|
x display more than one layer
|
||||||
- add/remove layers
|
x add/remove layers
|
||||||
- layer masks by sculpture
|
- layer masks by sculpture
|
||||||
- blend modes
|
- blend modes - create a copy of the led's per layer, handle blending outside of patterns
|
||||||
|
- interface for animation system
|
||||||
|
- add/remove layers
|
||||||
|
- select blend modes
|
||||||
|
- change which layer an animation is on
|
||||||
|
-
|
||||||
- setting start and end of timeline (how long is a loop)
|
- setting start and end of timeline (how long is a loop)
|
||||||
- clips can have parameters that drive them?
|
- clips can have parameters that drive them?
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue