Skip to content

Commit 05a637a

Browse files
committed
Added TimedComponent and and its correlates
1 parent f82a31c commit 05a637a

14 files changed

Lines changed: 619 additions & 17 deletions

File tree

editor/Catalog.cpp

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,38 @@ namespace {
206206
makeFastProperty<ActionComponent, bool, &ActionComponent::ownedTarget>("ownedTarget", PropertyType::Bool, UpdateFlags_None),
207207
};
208208

209+
static const FastPropertyDescriptor kTimedActionProperties[] = {
210+
makeFastProperty<TimedActionComponent, float, &TimedActionComponent::duration>("duration", PropertyType::Float, UpdateFlags_None),
211+
makeFastProperty<TimedActionComponent, bool, &TimedActionComponent::loop>("loop", PropertyType::Bool, UpdateFlags_None),
212+
};
213+
214+
static const FastPropertyDescriptor kPositionActionProperties[] = {
215+
makeFastPropertyNoDefault<PositionActionComponent, Vector3, &PositionActionComponent::endPosition>("endPosition", PropertyType::Vector3, UpdateFlags_None),
216+
makeFastPropertyNoDefault<PositionActionComponent, Vector3, &PositionActionComponent::startPosition>("startPosition", PropertyType::Vector3, UpdateFlags_None),
217+
};
218+
219+
static const FastPropertyDescriptor kRotationActionProperties[] = {
220+
makeFastPropertyNoDefault<RotationActionComponent, Quaternion, &RotationActionComponent::endRotation>("endRotation", PropertyType::Quat, UpdateFlags_None),
221+
makeFastPropertyNoDefault<RotationActionComponent, Quaternion, &RotationActionComponent::startRotation>("startRotation", PropertyType::Quat, UpdateFlags_None),
222+
makeFastProperty<RotationActionComponent, bool, &RotationActionComponent::shortestPath>("shortestPath", PropertyType::Bool, UpdateFlags_None),
223+
};
224+
225+
static const FastPropertyDescriptor kScaleActionProperties[] = {
226+
makeFastPropertyNoDefault<ScaleActionComponent, Vector3, &ScaleActionComponent::endScale>("endScale", PropertyType::Vector3, UpdateFlags_None),
227+
makeFastPropertyNoDefault<ScaleActionComponent, Vector3, &ScaleActionComponent::startScale>("startScale", PropertyType::Vector3, UpdateFlags_None),
228+
};
229+
230+
static const FastPropertyDescriptor kColorActionProperties[] = {
231+
makeFastPropertyNoDefault<ColorActionComponent, Vector3, &ColorActionComponent::endColor>("endColor", PropertyType::Vector3, UpdateFlags_None),
232+
makeFastPropertyNoDefault<ColorActionComponent, Vector3, &ColorActionComponent::startColor>("startColor", PropertyType::Vector3, UpdateFlags_None),
233+
makeFastProperty<ColorActionComponent, bool, &ColorActionComponent::useSRGB>("useSRGB", PropertyType::Bool, UpdateFlags_None),
234+
};
235+
236+
static const FastPropertyDescriptor kAlphaActionProperties[] = {
237+
makeFastPropertyNoDefault<AlphaActionComponent, float, &AlphaActionComponent::endAlpha>("endAlpha", PropertyType::Float, UpdateFlags_None),
238+
makeFastPropertyNoDefault<AlphaActionComponent, float, &AlphaActionComponent::startAlpha>("startAlpha", PropertyType::Float, UpdateFlags_None),
239+
};
240+
209241
static const FastPropertyDescriptor kBundleProperties[] = {
210242
makeFastProperty<BundleComponent, std::string, &BundleComponent::name>("name", PropertyType::String, UpdateFlags_None),
211243
makeFastProperty<BundleComponent, std::string, &BundleComponent::path>("path", PropertyType::String, UpdateFlags_None),
@@ -1057,6 +1089,30 @@ namespace {
10571089
return resolveDirectProperties(static_cast<ActionComponent*>(comp), propertyName, kActionProperties);
10581090
}
10591091

1092+
PropertyData resolveTimedActionPropertyFast(void* comp, const std::string& propertyName) {
1093+
return resolveDirectProperties(static_cast<TimedActionComponent*>(comp), propertyName, kTimedActionProperties);
1094+
}
1095+
1096+
PropertyData resolvePositionActionPropertyFast(void* comp, const std::string& propertyName) {
1097+
return resolveDirectProperties(static_cast<PositionActionComponent*>(comp), propertyName, kPositionActionProperties);
1098+
}
1099+
1100+
PropertyData resolveRotationActionPropertyFast(void* comp, const std::string& propertyName) {
1101+
return resolveDirectProperties(static_cast<RotationActionComponent*>(comp), propertyName, kRotationActionProperties);
1102+
}
1103+
1104+
PropertyData resolveScaleActionPropertyFast(void* comp, const std::string& propertyName) {
1105+
return resolveDirectProperties(static_cast<ScaleActionComponent*>(comp), propertyName, kScaleActionProperties);
1106+
}
1107+
1108+
PropertyData resolveColorActionPropertyFast(void* comp, const std::string& propertyName) {
1109+
return resolveDirectProperties(static_cast<ColorActionComponent*>(comp), propertyName, kColorActionProperties);
1110+
}
1111+
1112+
PropertyData resolveAlphaActionPropertyFast(void* comp, const std::string& propertyName) {
1113+
return resolveDirectProperties(static_cast<AlphaActionComponent*>(comp), propertyName, kAlphaActionProperties);
1114+
}
1115+
10601116
PropertyData resolveSpriteAnimationPropertyFast(void* compRef, const std::string& propertyName) {
10611117
SpriteAnimationComponent* comp = static_cast<SpriteAnimationComponent*>(compRef);
10621118
if (!comp) return PropertyData();
@@ -1320,6 +1376,30 @@ namespace {
13201376
enumerateFromDescriptors(comp, ps, kActionProperties);
13211377
}
13221378

1379+
void enumerateTimedActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1380+
enumerateFromDescriptors(comp, ps, kTimedActionProperties);
1381+
}
1382+
1383+
void enumeratePositionActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1384+
enumerateFromDescriptors(comp, ps, kPositionActionProperties);
1385+
}
1386+
1387+
void enumerateRotationActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1388+
enumerateFromDescriptors(comp, ps, kRotationActionProperties);
1389+
}
1390+
1391+
void enumerateScaleActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1392+
enumerateFromDescriptors(comp, ps, kScaleActionProperties);
1393+
}
1394+
1395+
void enumerateColorActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1396+
enumerateFromDescriptors(comp, ps, kColorActionProperties);
1397+
}
1398+
1399+
void enumerateAlphaActionProperties(void* comp, std::map<std::string, PropertyData>& ps) {
1400+
enumerateFromDescriptors(comp, ps, kAlphaActionProperties);
1401+
}
1402+
13231403
void enumerateModelProperties(void* compRef, std::map<std::string, PropertyData>& ps) {
13241404
ModelComponent* comp = static_cast<ModelComponent*>(compRef);
13251405
ModelComponent& def = getDefaultComponent<ModelComponent>();
@@ -1771,6 +1851,12 @@ namespace {
17711851
{ComponentType::Body2DComponent, &findComponentPtr<Body2DComponent>, &resolveBody2DPropertyFast, &enumerateBody2DProperties},
17721852
{ComponentType::Body3DComponent, &findComponentPtr<Body3DComponent>, &resolveBody3DPropertyFast, &enumerateBody3DProperties},
17731853
{ComponentType::ActionComponent, &findComponentPtr<ActionComponent>, &resolveActionPropertyFast, &enumerateActionProperties},
1854+
{ComponentType::TimedActionComponent, &findComponentPtr<TimedActionComponent>, &resolveTimedActionPropertyFast, &enumerateTimedActionProperties},
1855+
{ComponentType::PositionActionComponent, &findComponentPtr<PositionActionComponent>, &resolvePositionActionPropertyFast, &enumeratePositionActionProperties},
1856+
{ComponentType::RotationActionComponent, &findComponentPtr<RotationActionComponent>, &resolveRotationActionPropertyFast, &enumerateRotationActionProperties},
1857+
{ComponentType::ScaleActionComponent, &findComponentPtr<ScaleActionComponent>, &resolveScaleActionPropertyFast, &enumerateScaleActionProperties},
1858+
{ComponentType::ColorActionComponent, &findComponentPtr<ColorActionComponent>, &resolveColorActionPropertyFast, &enumerateColorActionProperties},
1859+
{ComponentType::AlphaActionComponent, &findComponentPtr<AlphaActionComponent>, &resolveAlphaActionPropertyFast, &enumerateAlphaActionProperties},
17741860
{ComponentType::SpriteAnimationComponent, &findComponentPtr<SpriteAnimationComponent>, &resolveSpriteAnimationPropertyFast, &enumerateSpriteAnimationProperties},
17751861
{ComponentType::AnimationComponent, &findComponentPtr<AnimationComponent>, &resolveAnimationPropertyFast, &enumerateAnimationProperties},
17761862
{ComponentType::ModelComponent, &findComponentPtr<ModelComponent>, &resolveModelPropertyFast, &enumerateModelProperties},
@@ -2691,6 +2777,42 @@ void editor::Catalog::copyComponent(EntityRegistry* sourceRegistry, Entity sourc
26912777
break;
26922778
}
26932779

2780+
case ComponentType::TimedActionComponent: {
2781+
YAML::Node encoded = Stream::encodeTimedActionComponent(sourceRegistry->getComponent<TimedActionComponent>(sourceEntity));
2782+
targetRegistry->getComponent<TimedActionComponent>(targetEntity) = Stream::decodeTimedActionComponent(encoded);
2783+
break;
2784+
}
2785+
2786+
case ComponentType::PositionActionComponent: {
2787+
YAML::Node encoded = Stream::encodePositionActionComponent(sourceRegistry->getComponent<PositionActionComponent>(sourceEntity));
2788+
targetRegistry->getComponent<PositionActionComponent>(targetEntity) = Stream::decodePositionActionComponent(encoded);
2789+
break;
2790+
}
2791+
2792+
case ComponentType::RotationActionComponent: {
2793+
YAML::Node encoded = Stream::encodeRotationActionComponent(sourceRegistry->getComponent<RotationActionComponent>(sourceEntity));
2794+
targetRegistry->getComponent<RotationActionComponent>(targetEntity) = Stream::decodeRotationActionComponent(encoded);
2795+
break;
2796+
}
2797+
2798+
case ComponentType::ScaleActionComponent: {
2799+
YAML::Node encoded = Stream::encodeScaleActionComponent(sourceRegistry->getComponent<ScaleActionComponent>(sourceEntity));
2800+
targetRegistry->getComponent<ScaleActionComponent>(targetEntity) = Stream::decodeScaleActionComponent(encoded);
2801+
break;
2802+
}
2803+
2804+
case ComponentType::ColorActionComponent: {
2805+
YAML::Node encoded = Stream::encodeColorActionComponent(sourceRegistry->getComponent<ColorActionComponent>(sourceEntity));
2806+
targetRegistry->getComponent<ColorActionComponent>(targetEntity) = Stream::decodeColorActionComponent(encoded);
2807+
break;
2808+
}
2809+
2810+
case ComponentType::AlphaActionComponent: {
2811+
YAML::Node encoded = Stream::encodeAlphaActionComponent(sourceRegistry->getComponent<AlphaActionComponent>(sourceEntity));
2812+
targetRegistry->getComponent<AlphaActionComponent>(targetEntity) = Stream::decodeAlphaActionComponent(encoded);
2813+
break;
2814+
}
2815+
26942816
default:
26952817
printf("WARNING: Unsupported component type for copying: %s\n", getComponentName(compType).c_str());
26962818
break;

editor/Catalog.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ namespace doriax::editor{
4141
UIComponent,
4242
UILayoutComponent,
4343
ActionComponent,
44+
TimedActionComponent,
4445
AlphaActionComponent,
4546
AnimationComponent,
4647
AudioComponent,
@@ -79,7 +80,6 @@ namespace doriax::editor{
7980
TextComponent,
8081
TextEditComponent,
8182
TilemapComponent,
82-
TimedActionComponent,
8383
TranslateTracksComponent,
8484
UIContainerComponent
8585
};

editor/Factory.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,6 +1264,80 @@ std::string editor::Factory::createActionComponent(int indentSpaces, EntityRegis
12641264
return code.str();
12651265
}
12661266

1267+
std::string editor::Factory::createTimedActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1268+
if (!scene->findComponent<TimedActionComponent>(entity)) return "";
1269+
TimedActionComponent& timed = scene->getComponent<TimedActionComponent>(entity);
1270+
std::ostringstream code;
1271+
const std::string ind = indentation(indentSpaces);
1272+
code << ind << "TimedActionComponent timedcomp;\n";
1273+
code << ind << "timedcomp.duration = " << formatFloat(timed.duration) << ";\n";
1274+
code << ind << "timedcomp.loop = " << formatBool(timed.loop) << ";\n";
1275+
addComponentCode(code, ind, sceneName, entityName, entity, "TimedActionComponent", "timedcomp", assignExisting);
1276+
return code.str();
1277+
}
1278+
1279+
std::string editor::Factory::createPositionActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1280+
if (!scene->findComponent<PositionActionComponent>(entity)) return "";
1281+
PositionActionComponent& posAction = scene->getComponent<PositionActionComponent>(entity);
1282+
std::ostringstream code;
1283+
const std::string ind = indentation(indentSpaces);
1284+
code << ind << "PositionActionComponent poscomp;\n";
1285+
code << ind << "poscomp.endPosition = " << formatVector3(posAction.endPosition) << ";\n";
1286+
code << ind << "poscomp.startPosition = " << formatVector3(posAction.startPosition) << ";\n";
1287+
addComponentCode(code, ind, sceneName, entityName, entity, "PositionActionComponent", "poscomp", assignExisting);
1288+
return code.str();
1289+
}
1290+
1291+
std::string editor::Factory::createRotationActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1292+
if (!scene->findComponent<RotationActionComponent>(entity)) return "";
1293+
RotationActionComponent& rotAction = scene->getComponent<RotationActionComponent>(entity);
1294+
std::ostringstream code;
1295+
const std::string ind = indentation(indentSpaces);
1296+
code << ind << "RotationActionComponent rotcomp;\n";
1297+
code << ind << "rotcomp.endRotation = " << formatQuaternion(rotAction.endRotation) << ";\n";
1298+
code << ind << "rotcomp.startRotation = " << formatQuaternion(rotAction.startRotation) << ";\n";
1299+
code << ind << "rotcomp.shortestPath = " << formatBool(rotAction.shortestPath) << ";\n";
1300+
addComponentCode(code, ind, sceneName, entityName, entity, "RotationActionComponent", "rotcomp", assignExisting);
1301+
return code.str();
1302+
}
1303+
1304+
std::string editor::Factory::createScaleActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1305+
if (!scene->findComponent<ScaleActionComponent>(entity)) return "";
1306+
ScaleActionComponent& scaleAction = scene->getComponent<ScaleActionComponent>(entity);
1307+
std::ostringstream code;
1308+
const std::string ind = indentation(indentSpaces);
1309+
code << ind << "ScaleActionComponent scalecomp;\n";
1310+
code << ind << "scalecomp.endScale = " << formatVector3(scaleAction.endScale) << ";\n";
1311+
code << ind << "scalecomp.startScale = " << formatVector3(scaleAction.startScale) << ";\n";
1312+
addComponentCode(code, ind, sceneName, entityName, entity, "ScaleActionComponent", "scalecomp", assignExisting);
1313+
return code.str();
1314+
}
1315+
1316+
std::string editor::Factory::createColorActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1317+
if (!scene->findComponent<ColorActionComponent>(entity)) return "";
1318+
ColorActionComponent& colorAction = scene->getComponent<ColorActionComponent>(entity);
1319+
std::ostringstream code;
1320+
const std::string ind = indentation(indentSpaces);
1321+
code << ind << "ColorActionComponent colorcomp;\n";
1322+
code << ind << "colorcomp.endColor = " << formatVector3(colorAction.endColor) << ";\n";
1323+
code << ind << "colorcomp.startColor = " << formatVector3(colorAction.startColor) << ";\n";
1324+
code << ind << "colorcomp.useSRGB = " << formatBool(colorAction.useSRGB) << ";\n";
1325+
addComponentCode(code, ind, sceneName, entityName, entity, "ColorActionComponent", "colorcomp", assignExisting);
1326+
return code.str();
1327+
}
1328+
1329+
std::string editor::Factory::createAlphaActionComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
1330+
if (!scene->findComponent<AlphaActionComponent>(entity)) return "";
1331+
AlphaActionComponent& alphaAction = scene->getComponent<AlphaActionComponent>(entity);
1332+
std::ostringstream code;
1333+
const std::string ind = indentation(indentSpaces);
1334+
code << ind << "AlphaActionComponent alphacomp;\n";
1335+
code << ind << "alphacomp.endAlpha = " << formatFloat(alphaAction.endAlpha) << ";\n";
1336+
code << ind << "alphacomp.startAlpha = " << formatFloat(alphaAction.startAlpha) << ";\n";
1337+
addComponentCode(code, ind, sceneName, entityName, entity, "AlphaActionComponent", "alphacomp", assignExisting);
1338+
return code.str();
1339+
}
1340+
12671341
std::string editor::Factory::createSpriteAnimationComponent(int indentSpaces, EntityRegistry* scene, Entity entity, std::string sceneName, std::string entityName, bool assignExisting, const std::unordered_map<Entity, std::string>* entityVarNames) {
12681342
if (!scene->findComponent<SpriteAnimationComponent>(entity)) return "";
12691343
SpriteAnimationComponent& spriteanim = scene->getComponent<SpriteAnimationComponent>(entity);
@@ -1475,6 +1549,12 @@ std::string editor::Factory::createComponent(int indentSpaces, EntityRegistry* s
14751549
case ComponentType::Joint2DComponent: return createJoint2DComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
14761550
case ComponentType::Joint3DComponent: return createJoint3DComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
14771551
case ComponentType::ActionComponent: return createActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1552+
case ComponentType::TimedActionComponent: return createTimedActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1553+
case ComponentType::PositionActionComponent: return createPositionActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1554+
case ComponentType::RotationActionComponent: return createRotationActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1555+
case ComponentType::ScaleActionComponent: return createScaleActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1556+
case ComponentType::ColorActionComponent: return createColorActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
1557+
case ComponentType::AlphaActionComponent: return createAlphaActionComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
14781558
case ComponentType::SpriteAnimationComponent: return createSpriteAnimationComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
14791559
case ComponentType::AnimationComponent: return createAnimationComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);
14801560
case ComponentType::ModelComponent: return createModelComponent(indentSpaces, scene, entity, sceneName, entityName, assignExisting, entityVarNames);

0 commit comments

Comments
 (0)