// This file is a part of Framsticks SDK. http://www.framsticks.com/ // Copyright (C) 1999-2015 Maciej Komosinski and Szymon Ulatowski. // See LICENSE.txt for details. #include "genotypeloader.h" #define FIELDSTRUCT MiniGenotype ParamEntry minigenotype_paramtab[]= { {"Genotype",1,21,"org",}, {"name",0,0,"Name","s 0 40",FIELD(name),}, {"genotype",0,0,"Genotype","s 1",FIELD(genotype),}, {"info",0,0,"Info","s 1",FIELD(info),}, {"energy0",0,0,"Starting energy","f 0 -1 0",FIELD(energy0),}, {"numparts",0,0,"Body parts","d",FIELD(numparts),}, {"numjoints",0,0,"Body joints","d",FIELD(numjoints),}, {"numneurons",0,0,"Brain size","d",FIELD(numneurons),}, {"numconnections",0,0,"Brain connections","d",FIELD(numconnections),}, {"num",0,0,"Ordinal number","d",FIELD(ordnumber),}, {"gnum",0,0,"Generation","d",FIELD(generation),}, {"instances",0,0,"Instances","d",FIELD(instances),"Copies of this genotype",}, {"lifespan",0,0,"Life span","f",FIELD(lifespan),"Average life span",}, {"velocity",0,0,"Velocity","f",FIELD(velocity),"Average velocity",}, {"distance",0,0,"Distance","f",FIELD(distance),}, {"vertvel",0,0,"Vertical velocity","f",FIELD(vertvel),}, {"vertpos",0,0,"Vertical position","f",FIELD(vertpos),}, {"user1",0,0,"User field 1","x",FIELD(user1),}, {"user2",0,0,"User field 2","x",FIELD(user2),}, {"user3",0,0,"User field 3","x",FIELD(user3),}, {"is_valid",0,0,"Validity","d -1 1 -1",FIELD(is_valid), "0 = invalid genotype\n" "1 = valid genotype\n" "-1 = validity is not known."}, {"uid",0,0,"#","s",FIELD(uid),"Unique identifier"}, {0,0,0,}, }; #undef FIELDSTRUCT MiniGenotypeLoader::MiniGenotypeLoader():genotype_param(minigenotype_paramtab,&genotype_object) {init();} MiniGenotypeLoader::MiniGenotypeLoader(VirtFILE *f):MultiParamLoader(f),genotype_param(minigenotype_paramtab,&genotype_object) {init();} MiniGenotypeLoader::MiniGenotypeLoader(const char* filename):MultiParamLoader(filename),genotype_param(minigenotype_paramtab,&genotype_object) {init();} void MiniGenotypeLoader::init() { addObject(&genotype_param); breakOn(MultiParamLoader::OnError + MultiParamLoader::AfterObject); } MiniGenotype* MiniGenotypeLoader::loadNextGenotype() { genotype_object.clear(); if ((go()==AfterObject)&&(getObject().matchesInterfaceName(&genotype_param))) return &genotype_object; else return 0; }