Serialisering, tweaking etc

Allting som har med programmering att göra.

Serialisering, tweaking etc

Inläggav dooz » 09 sep 2009, 22:15

Jag tänkte egentligen bara dela med mig av ett rätt coolt hack som jag mer eller mindre snubblade över, och har knappat lite på i veckan.

Det hela började med att jag hittade Jon Wattes reflection kod, som gör att man kan exponera variabler för omvärlden på ett väldigt smidigt sätt. Den skapar en "prototyp" för klasser, som innebär att man får tillgång till en array med offset samt typinformation till de medlemsvariabler man anger.

Samtidigt hade jag precis börjat kolla på AntTweakBar som är ett ramverk för att tweaka variabler, där man i princip säger "här har du en void* till data som är av int typ. låt mig editera den, tack".

Jag skrev lite klisterkod som koppade ihop reflectiongrejen med anttweak, samt lite enkel load/save kod, och det blev faktiskt rätt användbart. Jag slängde ihop ett enkelt exempel, som bör funka out of the box (kräver dx9), så man kan se hur det hela funkar, innan det försvinner ner i min existerande kodbas, för att sen aldrig mer se dagens ljus. Eller nåt :)

Så här kan det se ut om man har en struct som heter FunkyStruct, med 4 variabler som man vill kunna editera etc.
  1.  
  2. struct FunkyStruct
  3. {
  4.   FunkyStruct()
  5.     : int_value_(0)
  6.     , float_value_(0)
  7.     , v2_(0, 0)
  8.     , v3_(0, 0, 0)
  9.   {
  10.     Serializer::instance().add_instance(this);
  11.   }
  12.  
  13.   ~FunkyStruct()
  14.   {
  15.     Serializer::instance().remove_instance(this);
  16.   }
  17.  
  18.   int int_value_;
  19.   float float_value_;
  20.   D3DXVECTOR2 v2_;
  21.   D3DXVECTOR3 v3_;
  22.  
  23.   RTTI(FunkyStruct, MEMBER(int_value_) MEMBER(float_value_) MEMBER(v2_) MEMBER(v3_));
  24. };
  25.  


Disclaimer: Koden är inte tänkt att vara production quality, utan väldigt mycket proof of concept (exvis så funkar inte koden för att hantera std::string som den ska), men jag tyckte det var jäkligt skoj att pilla med, och hoppas någon annan också tycker det.

Koden
Användarvisningsbild
dooz
 
Inlägg: 37
Blev medlem: 11 maj 2009, 21:04
Ort: Göteborg

Re: Serialisering, tweaking etc

Inläggav Hildenborg » 27 sep 2009, 20:27

Satt och funderade över hur jag skulle lösa just sånt här till ett privat projekt jag tänkte starta på, och så kom jag ihåg: "Hmm... Postade inte någon någonting om sånt här på forumet?"
Jättebra!
Så slapp jag spendera tid på detta :)
Sun Tzu: "In peace prepare for war, in war prepare for peace."
Användarvisningsbild
Hildenborg
Site Admin
 
Inlägg: 191
Blev medlem: 22 apr 2009, 20:25
Ort: Göteborg


Återgå till Programmering

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 0 gäster

cron