Lumenarium/src/sculpture_gen/sculpture_gen.h

106 lines
2.9 KiB
C

//
// File: sculpture_gen.h
// Author: Peter Slattery
// Creation Date: 2021-01-06
//
#ifndef SCULPTURE_GEN_H
internal void
WriteIndented(gs_string* Buffer, u32 Indent, char* Format, ...)
{
va_list Args;
va_start(Args, Format);
for (u32 i = 0; i < Indent; i++)
{
OutChar(Buffer, '\t');
}
PrintFArgsList(Buffer, Format, Args);
va_end(Args);
}
internal void
WriteAssemblyUARTOpen(gs_string* Buffer, char* Name, u32 Scale, v3 Center, u32 StripCount, char* ComPort)
{
WriteIndented(Buffer, 0, "assembly_name: \"%s\";\n", Name);
WriteIndented(Buffer, 0, "assembly_scale: %d;\n", Scale);
WriteIndented(Buffer, 0, "assembly_center: (%f, %f, %f);\n", Center.x, Center.y, Center.z);
WriteIndented(Buffer, 0, "led_strip_count: %d;\n", StripCount);
WriteIndented(Buffer, 0, "output_mode: \"UART\";\n");
if (ComPort)
{
WriteIndented(Buffer, 0, "com_port: \"%s\";\n", ComPort);
}
}
internal void
WriteLedStripOpen(gs_string* Buffer, u32 Channel, char* ComPort)
{
WriteIndented(Buffer, 0, "led_strip:\n{\n");
WriteIndented(Buffer, 1, "output_uart: {\n");
WriteIndented(Buffer, 2, "channel: %d;\n", Channel);
WriteIndented(Buffer, 2, "com_port: \"%s\";\n", ComPort);
WriteIndented(Buffer, 1, "};\n\n");
}
internal void
WriteSegmentSequenceOpen(gs_string* Buffer, u32 SegmentCount)
{
WriteIndented(Buffer, 1, "segment: {\n");
WriteIndented(Buffer, 2, "point_placement_type: \"SegmentSequence\";\n");
WriteIndented(Buffer, 2, "segment_sequence:\n");
WriteIndented(Buffer, 2, "{\n");
WriteIndented(Buffer, 3, "segment_count: %d;\n", SegmentCount);
}
internal void
WriteSegmentSequenceSegment(gs_string* Buffer, v3 P0, v3 P1, u32 LedCount)
{
WriteIndented(Buffer, 3, "segment: {\n");
WriteIndented(Buffer, 4, "point_placement_type: \"InterpolatePoints\";\n");
WriteIndented(Buffer, 4, "interpolate_points: {\n");
WriteIndented(Buffer, 5, "start: (%f, %f, %f);\n", P0.x, P0.y, P0.z);
WriteIndented(Buffer, 5, "end: (%f, %f, %f);\n", P1.x, P1.y, P1.z);
WriteIndented(Buffer, 5, "led_count: %d;\n", LedCount);
WriteIndented(Buffer, 4, "};\n");
WriteIndented(Buffer, 3, "};\n");
}
internal void
WriteSegmentSequenceClose(gs_string* Buffer)
{
WriteIndented(Buffer, 2, "};\n");
WriteIndented(Buffer, 1, "};\n");
}
internal void
WriteSegmentTagsOpen(gs_string* Buffer, u32 TagCount)
{
WriteIndented(Buffer, 1, "tags_count: %d;\n", TagCount);
}
internal void
WriteSegmentTag(gs_string* Buffer, char* TagName, char* TagValue)
{
WriteIndented(Buffer, 1, "tag: {\n");
WriteIndented(Buffer, 2, "name: \"%s\";\n", TagName);
WriteIndented(Buffer, 2, "value: \"%s\";\n", TagValue);
WriteIndented(Buffer, 1, "};\n");
}
internal void
WriteSegmentTagsClose(gs_string* Buffer)
{
}
internal void
WriteLedStripClose(gs_string* Buffer)
{
WriteIndented(Buffer, 0, "};\n");
}
#define SCULPTURE_GEN_H
#endif // SCULPTURE_GEN_H