/** ** Parse missile-type. ** ** @param list List describing missile. */ local SCM CclMissileType(SCM list) { SCM value; int type; // Slot value=gh_car(list); type=gh_scm2int(value); if( type>=MissileTypeMax ) { fprintf(stderr,"Wrong type %d\n",type); return list; } list=gh_cdr(list); DebugLevel3("MissileType: %d\n",type); // Name value=gh_car(list); MissileTypes[type].Name=gh_scm2newstr(value,NULL); list=gh_cdr(list); // File value=gh_car(list); MissileTypes[type].File=gh_scm2newstr(value,NULL); list=gh_cdr(list); // Width,Height value=gh_car(list); MissileTypes[type].Width=gh_scm2int(value); list=gh_cdr(list); value=gh_car(list); MissileTypes[type].Height=gh_scm2int(value); list=gh_cdr(list); // Sound impact value=gh_car(list); #ifdef WITH_SOUND if (ccl_sound_p(value)) { MissileTypes[type].ImpactSound.Sound=ccl_sound_id(value); } else #endif if (!gh_boolean_p(value) || gh_scm2bool(value) ) { fprintf(stderr,"Wrong argument in MissileType\n"); } list=gh_cdr(list); // FIXME: class, speed not written!!! return list; }
int building_create_type(const char* name, SCM lst) { AList alist; while(!gh_null_p(lst)) { SCM key = gh_car(lst); if (gh_null_p(gh_cdr(lst))) { std::cout << "Missing argument to keyword!" << std::endl; } SCM value = gh_cadr(lst); if (gh_boolean_p(value)) { alist.set_bool(Guile::keyword2string(key), gh_scm2bool(value)); } else if (gh_number_p(value)) { alist.set_int(Guile::keyword2string(key), gh_scm2int(value)); } else if (gh_string_p(value)) { alist.set_string(Guile::keyword2string(key), Guile::scm2string(value)); } else { std::cout << "BuildingCommands: unknown argumnent type" << std::endl; } lst = gh_cddr(lst); } return BuildingTypeManager::current()->register_factory(new CustomBuildingFactory(name, alist)); }