MenuBar::MenuBar(ParentElement *parent_, GuiStateFlags s_flags, const ContextTree &tree, float bar_height) : GuiElement(parent_, APoint(), AVec(), GuiProps(s_flags, PROP_FLAGS)), CompoundControl(GuiProps(s_flags, PROP_FLAGS)), height(bar_height <= 0.0f ? DEFAULT_BAR_HEIGHT : bar_height) { AVec parent_size = parent->getSize(); setSize(AVec(parent_size.x, height)); std::vector<GuiElement*> children; GuiStateFlags b_state(SFlags::VISIBLE | SFlags::ENABLED | SFlags::FLOATING); int offset = 0; for(unsigned int i = 0; i < tree.children.size(); i++) { MenuBarButton *b = new MenuBarButton(this, b_state, tree.children[i], offset, height); children.push_back(b); menuButtons.push_back(b); offset += b->getSize().x; } CompoundControl::init(nullptr, &children); //Attach to top of parent container attachTo(parent, AttachSide::LEFT, 0.0f); attachTo(parent, AttachSide::RIGHT, 0.0f); attachTo(parent, AttachSide::TOP, 0.0f); setDefaultBg(); }
void CCombinedArtifactInstance::addAsConstituent(CArtifactInstance *art, ArtifactPosition slot) { assert(vstd::contains(*artType->constituents, art->artType.get())); assert(art->getParentNodes().size() == 1 && art->getParentNodes().front() == art->artType); constituentsInfo.push_back(ConstituentInfo(art, slot)); attachTo(art); }
void CGHeroInstance::deserializationFix() { artDeserializationFix(this); for (auto hs : specialty) { attachTo (hs); } }
void CStackInstance::setArmyObj(const CArmedInstance *ArmyObj) { if(_armyObj) detachFrom(const_cast<CArmedInstance*>(_armyObj)); _armyObj = ArmyObj; if(ArmyObj) { attachTo(const_cast<CArmedInstance*>(_armyObj)); } }
void CStackInstance::setType(const CCreature *c) { if(type) { detachFrom(const_cast<CCreature*>(type)); if (type->isMyUpgrade(c) && VLC->modh->modules.STACK_EXP) experience *= VLC->creh->expAfterUpgrade / 100.0; } type = c; if(type) attachTo(const_cast<CCreature*>(type)); }
void BattleInfo::localInit() { for(int i = 0; i < 2; i++) { auto armyObj = battleGetArmyObject(i); armyObj->battle = this; armyObj->attachTo(this); } for(CStack *s : stacks) localInitStack(s); exportBonuses(); }
KeyOrientation::KeyOrientation(ArCW& arCW, ArRef<C3DOF> c3dof) : Object3D(arCW), _c3dof(c3dof) { attachTo(_c3dof); // ArRef<Material3D> mat = new_Material3D(); ArRef<Material3D> mat = Material3D::NEW(); mat->setDiffuseColor(0.0, 0.2, 0.8); // _sphere = new_Sphere3D(); _sphere = Sphere3D::NEW(); _sphere->setRadius(0.2); _sphere->writeMaterial(mat); // ArRef<Shape3D> sh = new_Shape3D(); ArRef<Shape3D> sh = Shape3D::NEW(); sh->addRootPart(_sphere); setShape(sh); }
void ArxDbgPersistentObjReactor::copied(const AcDbObject* obj, const AcDbObject* newObj) { CString str; printReactorMessage(_T("Copied"), obj); acutPrintf(_T("\n%-15s : {%-18s: %s, %s} "), _T(""), _T("New Object"), ArxDbgUtils::objToClassStr(newObj), ArxDbgUtils::objToHandleStr(newObj, str)); ArxDbgUiTdcPersistentReactors::doStateDboxCopied(obj, newObj); if (newObj->database() != NULL) { Adesk::Boolean wasWritable; Acad::ErrorStatus es = upgradeFromNotify(wasWritable); if (es == Acad::eOk) { attachTo(newObj->objectId()); downgradeToNotify(wasWritable); } } }
MessageFilter::MessageFilter( MessageSession* parent ) : m_parent( 0 ) { if( parent ) attachTo( parent ); }
osg::ref_ptr<osg::Node> SceneManager::getInstance(const std::string &name, osg::Group* parentNode) { osg::ref_ptr<osg::Node> cloned = getInstance(name); attachTo(cloned, parentNode); return cloned; }
void CGHeroInstance::initObj() { blockVisit = true; auto hs = new HeroSpecial(); hs->setNodeType(CBonusSystemNode::SPECIALTY); attachTo(hs); //do we ever need to detach it? if(!type) initHero(); //TODO: set up everything for prison before specialties are configured skillsInfo.rand.setSeed(cb->gameState()->getRandomGenerator().nextInt()); skillsInfo.resetMagicSchoolCounter(); skillsInfo.resetWisdomCounter(); if (ID != Obj::PRISON) { auto customApp = VLC->objtypeh->getHandlerFor(ID, type->heroClass->id)->getOverride(cb->gameState()->getTile(visitablePos())->terType, this); if (customApp) appearance = customApp.get(); } for(const auto &spec : type->spec) //TODO: unfity with bonus system { auto bonus = new Bonus(); bonus->val = spec.val; bonus->sid = id.getNum(); //from the hero, specialty has no unique id bonus->duration = Bonus::PERMANENT; bonus->source = Bonus::HERO_SPECIAL; switch (spec.type) { case 1:// creature specialty { hs->growsWithLevel = true; const CCreature &specCreature = *VLC->creh->creatures[spec.additionalinfo]; //creature in which we have specialty //int creLevel = specCreature.level; //if(!creLevel) //{ // if(spec.additionalinfo == 146) // creLevel = 5; //treat ballista as 5-level // else // { // logGlobal->warnStream() << "Warning: unknown level of " << specCreature.namePl; // continue; // } //} //bonus->additionalInfo = spec.additionalinfo; //creature id, should not be used again - this works only with limiter bonus->limiter.reset(new CCreatureTypeLimiter (specCreature, true)); //with upgrades bonus->type = Bonus::PRIMARY_SKILL; bonus->valType = Bonus::ADDITIVE_VALUE; bonus->subtype = PrimarySkill::ATTACK; hs->addNewBonus(bonus); bonus = new Bonus(*bonus); bonus->subtype = PrimarySkill::DEFENSE; hs->addNewBonus(bonus); //values will be calculated later bonus = new Bonus(*bonus); bonus->type = Bonus::STACKS_SPEED; bonus->val = 1; //+1 speed hs->addNewBonus(bonus); } break; case 2://secondary skill hs->growsWithLevel = true; bonus->type = Bonus::SPECIAL_SECONDARY_SKILL; //needs to be recalculated with level, based on this value bonus->valType = Bonus::BASE_NUMBER; // to receive nonzero value bonus->subtype = spec.subtype; //skill id bonus->val = spec.val; //value per level, in percent hs->addNewBonus(bonus); bonus = new Bonus(*bonus); switch (spec.additionalinfo) { case 0: //normal bonus->valType = Bonus::PERCENT_TO_BASE; break; case 1: //when it's navigation or there's no 'base' at all bonus->valType = Bonus::PERCENT_TO_ALL; break; } bonus->type = Bonus::SECONDARY_SKILL_PREMY; //value will be calculated later hs->addNewBonus(bonus); break; case 3://spell damage bonus, level dependent but calculated elsewhere bonus->type = Bonus::SPECIAL_SPELL_LEV; bonus->subtype = spec.subtype; hs->addNewBonus(bonus); break; case 4://creature stat boost switch (spec.subtype) { case 1://attack bonus->type = Bonus::PRIMARY_SKILL; bonus->subtype = PrimarySkill::ATTACK; break; case 2://defense bonus->type = Bonus::PRIMARY_SKILL; bonus->subtype = PrimarySkill::DEFENSE; break; case 3: bonus->type = Bonus::CREATURE_DAMAGE; bonus->subtype = 0; //both min and max break; case 4://hp bonus->type = Bonus::STACK_HEALTH; break; case 5: bonus->type = Bonus::STACKS_SPEED; break; default: continue; } bonus->additionalInfo = spec.additionalinfo; //creature id bonus->valType = Bonus::ADDITIVE_VALUE; bonus->limiter.reset(new CCreatureTypeLimiter (*VLC->creh->creatures[spec.additionalinfo], true)); hs->addNewBonus(bonus); break; case 5://spell damage bonus in percent bonus->type = Bonus::SPECIFIC_SPELL_DAMAGE; bonus->valType = Bonus::BASE_NUMBER; // current spell system is screwed bonus->subtype = spec.subtype; //spell id hs->addNewBonus(bonus); break; case 6://damage bonus for bless (Adela) bonus->type = Bonus::SPECIAL_BLESS_DAMAGE; bonus->subtype = spec.subtype; //spell id if you ever wanted to use it otherwise bonus->additionalInfo = spec.additionalinfo; //damage factor hs->addNewBonus(bonus); break; case 7://maxed mastery for spell bonus->type = Bonus::MAXED_SPELL; bonus->subtype = spec.subtype; //spell i hs->addNewBonus(bonus); break; case 8://peculiar spells - enchantments bonus->type = Bonus::SPECIAL_PECULIAR_ENCHANT; bonus->subtype = spec.subtype; //spell id bonus->additionalInfo = spec.additionalinfo;//0, 1 for Coronius hs->addNewBonus(bonus); break; case 9://upgrade creatures { const auto &creatures = VLC->creh->creatures; bonus->type = Bonus::SPECIAL_UPGRADE; bonus->subtype = spec.subtype; //base id bonus->additionalInfo = spec.additionalinfo; //target id hs->addNewBonus(bonus); bonus = new Bonus(*bonus); for(auto cre_id : creatures[spec.subtype]->upgrades) { bonus->subtype = cre_id; //propagate for regular upgrades of base creature hs->addNewBonus(bonus); bonus = new Bonus(*bonus); } vstd::clear_pointer(bonus); break; } case 10://resource generation bonus->type = Bonus::GENERATE_RESOURCE; bonus->subtype = spec.subtype; hs->addNewBonus(bonus); break; case 11://starting skill with mastery (Adrienne) setSecSkillLevel(SecondarySkill(spec.val), spec.additionalinfo, true); break; case 12://army speed bonus->type = Bonus::STACKS_SPEED; hs->addNewBonus(bonus); break; case 13://Dragon bonuses (Mutare) bonus->type = Bonus::PRIMARY_SKILL; bonus->valType = Bonus::ADDITIVE_VALUE; switch (spec.subtype) { case 1: bonus->subtype = PrimarySkill::ATTACK; break; case 2: bonus->subtype = PrimarySkill::DEFENSE; break; } bonus->limiter.reset(new HasAnotherBonusLimiter(Bonus::DRAGON_NATURE)); hs->addNewBonus(bonus); break; default: logGlobal->warnStream() << "Unexpected hero specialty " << type; } } specialty.push_back(hs); //will it work? for (auto hs2 : type->specialty) //copy active (probably growing) bonuses from hero prootype to hero object { auto hs = new HeroSpecial(); attachTo(hs); //do we ever need to detach it? hs->setNodeType(CBonusSystemNode::SPECIALTY); for (auto bonus : hs2.bonuses) { hs->addNewBonus (bonus); } hs->growsWithLevel = hs2.growsWithLevel; specialty.push_back(hs); //will it work? } //initialize bonuses recreateSecondarySkillsBonuses(); Updatespecialty(); mana = manaLimit(); //after all bonuses are taken into account, make sure this line is the last one type->name = name; }
void CArtifactInstance::setType( CArtifact *Art ) { artType = Art; attachTo(Art); }
void CCombinedArtifactInstance::deserializationFix() { for(ConstituentInfo &ci : constituentsInfo) attachTo(ci.art); }
void TransformManipulator::reattach() { attachTo(m_subject); }