-
Notifications
You must be signed in to change notification settings - Fork 3
Assemblage
Assemblage används för att läsa in Entityspecifikationer (Recept) från fil. I denna fil specifierar du ett namn på entitettypen/receptet, vilka komponenter den färdiga entiteten skall ha (Ingridienser) samt initieringsvärden för dessa. För närvarande finns det bara stöd för ett recept per fil. Detta är ett medvetet val för att minska mergekonflikter. Du måste alltså skapa en ny assemblagefil för varje nytt recept.
Notera: Recept som saknar ingridienser läses inte in. Recept som har felaktiga ingridienser läses inte in.
För att en ingrediens ska fungera måste komponenten den beskriver veta om sitt TypeIdx samt ha mappat sig mot ComponentFactory. Ska ingridiensen ta emot initieringsvariabler måste metoden init() vara överlagrad i varje komponent.
###Filformat ######Kommentarer Kommentarer skrivs på egen rad där varje rad prefixas med antingen #,,/. Med dessa kan man alltså kommentera i formen #, / * */ och //. ######Entitetsspecifikation För att ange en Entitetsspecifikation(recept) ange 'e' följt av namn. Bara det första receptet läses in. ######Komponenter För att ange en komponent ange 'c' följt av komponentens namn. ######Initieringsdata för komponenter För att ange initialieringsdata för en komponent ange d (för data), följt av datatyp, variabelnamn samt värde. Detta måste vara i direkt anslutning till komponentdeklarationen. Du kan alltså itne speca flera komponenter och ange initieringsdata sist då assembalge inte fattar till vilken komponent en viss data då tillhör.
Datatyp | Shorthand | Fullt namn |
---|---|---|
Flyttal | f | float |
Dubbel precision | d | double |
Bool | b | bool |
Byte / tecken | c | char |
Heltal | i | int |
Positiva heltal | u | unsigned |
Sträng | s | string |
Vector 2 | n/a | vec2 |
Vector 3 | n/a | vec3 |
Vector 4 | n/a | vec4 |
# Comment
// Comment
/*
* Comment
*/
e <EntityName>
c <ComponentName>
d f <floatVariable> <value>
d float <floatVariable2> <value>
d d <doubleVariable> <value>
d double <doubleVariable2> <value>
d b <boolVariable> <value>
d bool <boolVariable2> <value>
d c <charVariable> <value>
d char <charVariable2> <value>
d s <stringVariable> <value>
d string <stringVariable2> <value>
d i <intVariable> <value>
d int <intVariable2> <value>
d u <unsignedIntVariable> <value>
d unsigned <unsignedIntVariable2> <value>
c nextComponentname
e ScoreHudElement
c HudElement
d string m_value "assemblage fungerar!"
d s m_element "scoreText"
Lägg in denna raden i h-filen:
static ComponentRegister<_KOMPONENTNAMN_> s_reg;
och denna i cpp:
ComponentRegister<_KOMPONENTNAMN_> _KOMPONENTNAMN_::s_reg("_KOMPONENTNAMN_");
Till sist så måste komponenten läggas till i konstruktorn för ComponentAssemblageAllocator
ifall den endast kommer skapas med assemblage. Detta för att tvinga länkaren att ladda symbolen för komponenten när endast skapning via assemblagefil görs. Använd templatefunktionen handle<_KOMPONENTNAMN_>();
för att registrera komponenten.
Ersätt _KOMPONENTNAMN_
med klassnamnet.
För att göra detta måste du överlagra init() från basklassen Component. Det är här du specifierar vilka variabler du vill ta emot.
Notera: Ingen typkonvertering eller kontroll av typ görs utan att alla data "castas" blint.
oepratorn >> är överlagrad för strängar samt basala datatyper. Du kan även läsa data mha getDataAsBasicDataType(), getDataAsVec2(), getDataAsVec3(), getDataAsVec4() och getDataAsString(). Vektorer måste läsas mha av deras hjälpmetoder.
Exempel på hur en init() kan se ut:
void Transform::init( vector<ComponentData> p_initData )
{
for( unsigned int i=0; i<p_initData.size(); i++ )
{
if( p_initData[i].dataName == "m_translation" )
p_initData[i].getDataAsVec3( m_trans.x, m_trans.y, m_trans.z );
else if( p_initData[i].dataName == "m_name" )
p_initData[i]>>m_name;
else if( p_initData[i].dataName == "m_type"
p_initData[i].getDataAsBasicDataType<int>( &m_type );
}
}
e SpecialMonkey
c LoadMesh
d string m_filename "InstanceApes.agl"
c Transform
d vec3 m_translation 0.0, -30.0, 0.0
c PhysicsBody
c BodyInitData
d float m_position 0.0, -30.0, 0.0
d int m_collisionEnabled 1
d int m_impulseEnabled 1
d int m_compound 0
d int m_static 1