void Simulation::loadObjectList() { for (int i = 0; i < foreObjOptions.quantity; i++) { foreObjOptions.bodyDef.position = b2Vec2(rand() % window->getSize().x / SCALE, rand() % window->getSize().y / SCALE); objectList.push_back(DynamicObject(world, window, foreObjOptions)); objectList.back().applyForce(b2Vec2(float32(rand() % 200 - 100), float32(rand() % 200 - 100)), 100); } }
DynamicObject Builder::open(const boost::filesystem::path &so) const { // use complete path to open a file, since dlopen() handles simple file // names in the funny way (i.e. "./my.so" works, but "my.so" doesn't). const std::string p=boost::filesystem::system_complete(so).string(); dlerror(); // remove last error void *h=dlopen(p.c_str(), flags_ ); // open shared object const char *err=dlerror(); // read error message if(err!=NULL) // check for error throw ExceptionCannotOpenSharedObject(SYSTEM_SAVE_LOCATION, so, err); HandlePtrNN handle( new Handle(h) ); return DynamicObject(handle); // return obtained handle }
std::shared_ptr<Creature> ObjectFactory::createCreature(TemplateCreaturePreset &presetTemplate, RarityType &rarityType){ TemplateCreatureBase &templateCreatureBase = engine::objectLibrary.creatureBaseTemplates[presetTemplate.creatureBaseId]; int health = (int)(engine::healthMax * presetTemplate.healthFromMax * rarityType.improvementMultiplier * engine::random.variationMultiplier(engine::statisticVariation)); int stamina = (int)(engine::staminaMax * presetTemplate.healthFromMax * rarityType.improvementMultiplier * engine::random.variationMultiplier(engine::statisticVariation)); int magic = (int)(engine::magicMax * presetTemplate.magicFromMax * rarityType.improvementMultiplier * engine::random.variationMultiplier(engine::statisticVariation)); double lootDropsFromMax = 0.30; std::shared_ptr<Creature> creature = std::shared_ptr<Creature>(new Creature( presetTemplate.id, RarityMod(rarityType), //engine::raritySystem.getCreatureMod(rarityType) DynamicObject(GameObject( presetTemplate.name, Creature::CREATURE, presetTemplate.glyph), health, templateCreatureBase.visualEffectOnTakeDamage), stamina, magic, engine::objectLibrary.ais[presetTemplate.aiId]->copy(), templateCreatureBase.limbs, lootDropsFromMax )); //equip weapons for (auto &weaponId : presetTemplate.weaponIds){ auto &weapon = createWeapon(engine::objectLibrary.weaponTemplates[weaponId], rarityType); creature->inventory.items.add(weapon); creature->inventory.equip(weapon); } //equip armors for (auto &armorId : presetTemplate.armorIds){ auto &armor = createArmor(engine::objectLibrary.armorTemplates[armorId], rarityType); creature->inventory.items.add(armor); creature->inventory.equip(armor); } //equip accessories for (auto &accessoryId : presetTemplate.accessoryIds){ auto &accessory = createAccessory(engine::objectLibrary.accessoryTemplates[accessoryId], rarityType); creature->inventory.items.add(accessory); creature->inventory.equip(accessory); } //regen stats creature->healthHit(-9999); creature->staminaHit(-9999); creature->magicHit(-9999); return creature; }