void ScrollControl::UpdateScrollBars() { if ( !m_InnerPanel ) { return; } if ( ContentsAreDocked() ) { m_VerticalScrollBar->SetHidden( true ); m_HorizontalScrollBar->SetHidden( true ); m_InnerPanel->SetSize( GetSize() ); m_InnerPanel->SetPos( 0, 0 ); return; } int childrenWidth = 0; int childrenHeight = 0; //Get the max size of all our children together for ( Base::List::iterator iter = m_InnerPanel->Children.begin(); iter != m_InnerPanel->Children.end(); ++iter ) { Base* pChild = *iter; childrenWidth = Utility::Max( childrenWidth, pChild->Right() ); childrenHeight = Utility::Max( childrenHeight, pChild->Bottom() ); } if ( m_bCanScrollH ) { m_InnerPanel->SetSize( Utility::Max( Width(), childrenWidth ), Utility::Max( Height(), childrenHeight ) ); } else { m_InnerPanel->SetSize( Width() - ( m_VerticalScrollBar->Hidden() ? 0 : m_VerticalScrollBar->Width() - 1 ), Utility::Max( Height(), childrenHeight ) ); } float wPercent = ( float ) Width() / ( float )( childrenWidth + ( m_VerticalScrollBar->Hidden() ? 0 : m_VerticalScrollBar->Width() ) ); float hPercent = ( float ) Height() / ( float )( childrenHeight + ( m_HorizontalScrollBar->Hidden() ? 0 : m_HorizontalScrollBar->Height() ) ); if ( m_bCanScrollV ) { SetVScrollRequired( hPercent >= 1 ); } else { m_VerticalScrollBar->SetHidden( true ); } if ( m_bCanScrollH ) { SetHScrollRequired( wPercent >= 1 ); } else { m_HorizontalScrollBar->SetHidden( true ); } m_VerticalScrollBar->SetContentSize( m_InnerPanel->Height() ); m_VerticalScrollBar->SetViewableContentSize( Height() - ( m_HorizontalScrollBar->Hidden() ? 0 : m_HorizontalScrollBar->Height() ) ); m_HorizontalScrollBar->SetContentSize( m_InnerPanel->Width() ); m_HorizontalScrollBar->SetViewableContentSize( Width() - ( m_VerticalScrollBar->Hidden() ? 0 : m_VerticalScrollBar->Width() ) ); int newInnerPanelPosX = 0; int newInnerPanelPosY = 0; if ( CanScrollV() && !m_VerticalScrollBar->Hidden() ) { newInnerPanelPosY = - ( ( m_InnerPanel->Height() ) - Height() + ( m_HorizontalScrollBar->Hidden() ? 0 : m_HorizontalScrollBar->Height() ) ) * m_VerticalScrollBar->GetScrolledAmount(); } if ( CanScrollH() && !m_HorizontalScrollBar->Hidden() ) { newInnerPanelPosX = - ( ( m_InnerPanel->Width() ) - Width() + ( m_VerticalScrollBar->Hidden() ? 0 : m_VerticalScrollBar->Width() ) ) * m_HorizontalScrollBar->GetScrolledAmount(); } m_InnerPanel->SetPos( newInnerPanelPosX , newInnerPanelPosY ); }
void init(const PlayBoardBase<H, W>& board) { Base::init(board); std::fill_n(leftMost, arrayH, 0); std::fill_n(rightMost, arrayH, width()-1); }
inline typename enable_if2 < (is_arma_sparse_type<T1>::value && is_arma_type<T2>::value && is_same_type<typename T1::elem_type, typename T2::elem_type>::value), SpMat<typename T1::elem_type> >::result operator/ ( const SpBase<typename T1::elem_type, T1>& x, const Base<typename T2::elem_type, T2>& y ) { arma_extra_debug_sigprint(); const SpProxy<T1> pa(x.get_ref()); const Proxy<T2> pb(y.get_ref()); arma_debug_assert_same_size(pa.get_n_rows(), pa.get_n_cols(), pb.get_n_rows(), pb.get_n_cols(), "element-wise division"); SpMat<typename T1::elem_type> result(pa.get_n_rows(), pa.get_n_cols()); // The compiler should be smart enough to optimize out the inner if/else statement entirely typename SpProxy<T1>::const_iterator_type it = pa.begin(); uword new_n_nonzero; while(it.pos() < pa.get_n_nonzero()) { if(Proxy<T2>::prefer_at_accessor == false) { const typename T1::elem_type val = (*it) / pb[(it.col() * pb.get_n_rows()) + it.row()]; if(val != 0) { ++new_n_nonzero; } } else { const typename T1::elem_type val = (*it) / pb.at(it.row(), it.col()); if(val != 0) { ++new_n_nonzero; } } ++it; } result.mem_resize(new_n_nonzero); typename SpProxy<T1>::const_iterator_type it2 = pa.begin(); uword cur_pos = 0; while(it2.pos() < pa.get_n_nonzero()) { if(Proxy<T2>::prefer_at_accessor == false) { const typename T1::elem_type val = (*it2) / pb[(it2.col() * pb.get_n_rows()) + it2.row()]; if(val != 0) { access::rw(result.values[cur_pos]) = val; access::rw(result.row_indices[cur_pos]) = it2.row(); ++access::rw(result.col_ptrs[it2.col() + 1]); ++cur_pos; } } else { const typename T1::elem_type val = (*it2) / pb.at(it2.row(), it2.col()); if(val != 0) { access::rw(result.values[cur_pos]) = val; access::rw(result.row_indices[cur_pos]) = it2.row(); ++access::rw(result.col_ptrs[it2.col() + 1]); ++cur_pos; } } ++it2; } // Fix column pointers for(uword col = 1; col <= result.n_cols; ++col) { access::rw(result.col_ptrs[col]) += result.col_ptrs[col - 1]; } return result; }
void GraphModeler::openModifyObject(Q3ListViewItem *item) { if (!item) return; Base* object = graphListener->findObject(item); BaseData* data = graphListener->findData(item); if( data == NULL && object == NULL) { assert(0); } ModifyObjectFlags dialogFlags = ModifyObjectFlags(); dialogFlags.setFlagsForModeler(); if (data) //user clicked on a data { current_Id_modifyDialog = data; } else { if(object) { current_Id_modifyDialog = object; if (dynamic_cast<core::objectmodel::ConfigurationSetting*>(object)) dialogFlags.HIDE_FLAG=true; } else { assert(0); } } //Unicity and identification of the windows std::map< void*, QDialog* >::iterator testWindow = map_modifyObjectWindow.find( current_Id_modifyDialog); if ( testWindow != map_modifyObjectWindow.end()) { //Object already being modified: no need to open a new window (*testWindow).second->raise(); return; } ModifyObject *dialogModify = new ModifyObject( current_Id_modifyDialog,item,this,dialogFlags,item->text(0)); connect(dialogModify, SIGNAL(beginObjectModification(sofa::core::objectmodel::Base*)), historyManager, SLOT(beginModification(sofa::core::objectmodel::Base*))); connect(dialogModify, SIGNAL(endObjectModification(sofa::core::objectmodel::Base*)), historyManager, SLOT(endModification(sofa::core::objectmodel::Base*))); if(data) { dialogModify->createDialog(data); } if(object) { dialogModify->createDialog(object); } if(object && propertyWidget) propertyWidget->addComponent(object->getName().c_str(), object, item); map_modifyObjectWindow.insert( std::make_pair(current_Id_modifyDialog, dialogModify)); //If the item clicked is a node, we add it to the list of the element modified map_modifyDialogOpened.insert ( std::make_pair ( current_Id_modifyDialog, item ) ); connect ( dialogModify, SIGNAL( dialogClosed(void *) ) , this, SLOT( modifyUnlock(void *))); dialogModify->show(); dialogModify->raise(); }
HINLINE static DataSpace<DIM> getGridDim(const Base &base, uint32_t exchangeType) { return base.getGridSuperCells(); }
/** * Prepares debriefing: gathers Aliens, Corpses, Artefacts, UFO Components. * Adds the items to the craft. * Also calculates the soldiers experience, and possible promotions. * If aborted, only the things on the exit area are recovered. */ void DebriefingState::prepareDebriefing() { _stats.push_back(new DebriefingStat("STR_ALIENS_KILLED", false)); _stats.push_back(new DebriefingStat("STR_ALIEN_CORPSES_RECOVERED", false)); _stats.push_back(new DebriefingStat("STR_LIVE_ALIENS_RECOVERED", false)); _stats.push_back(new DebriefingStat("STR_ALIEN_ARTIFACTS_RECOVERED", false)); _stats.push_back(new DebriefingStat("STR_ALIEN_BASE_CONTROL_DESTROYED", false)); _stats.push_back(new DebriefingStat("STR_CIVILIANS_KILLED_BY_ALIENS", false)); _stats.push_back(new DebriefingStat("STR_CIVILIANS_KILLED_BY_XCOM_OPERATIVES", false)); _stats.push_back(new DebriefingStat("STR_CIVILIANS_SAVED", false)); _stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_KILLED", false)); //_stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_RETIRED_THROUGH_INJURY", false)); _stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_MISSING_IN_ACTION", false)); _stats.push_back(new DebriefingStat("STR_TANKS_DESTROYED", false)); _stats.push_back(new DebriefingStat("STR_XCOM_CRAFT_LOST", false)); _stats.push_back(new DebriefingStat("STR_UFO_POWER_SOURCE", true)); _stats.push_back(new DebriefingStat("STR_UFO_NAVIGATION", true)); _stats.push_back(new DebriefingStat("STR_UFO_CONSTRUCTION", true)); _stats.push_back(new DebriefingStat("STR_ALIEN_FOOD", true)); _stats.push_back(new DebriefingStat("STR_ALIEN_REPRODUCTION", true)); _stats.push_back(new DebriefingStat("STR_ALIEN_ENTERTAINMENT", true)); _stats.push_back(new DebriefingStat("STR_ALIEN_SURGERY", true)); _stats.push_back(new DebriefingStat("STR_EXAMINATION_ROOM", true)); _stats.push_back(new DebriefingStat("STR_ALIEN_ALLOYS", true)); _stats.push_back(new DebriefingStat("STR_ELERIUM_115", true)); SavedGame *save = _game->getSavedGame(); SavedBattleGame *battle = save->getBattleGame(); bool aborted = battle->isAborted(); Craft* craft = 0; std::vector<Craft*>::iterator craftIterator; Base* base = 0; int playerInExitArea = 0; // if this stays 0 the craft is lost... int playersSurvived = 0; // if this stays 0 the craft is lost... for (std::vector<Base*>::iterator i = save->getBases()->begin(); i != save->getBases()->end(); ++i) { // in case we have a craft - check which craft it is about for (std::vector<Craft*>::iterator j = (*i)->getCrafts()->begin(); j != (*i)->getCrafts()->end(); ++j) { if ((*j)->isInBattlescape()) { craft = (*j); base = (*i); craftIterator = j; craft->returnToBase(); craft->setLowFuel(true); craft->setInBattlescape(false); } } } // UFO crash/landing site disappears for (std::vector<Ufo*>::iterator i = save->getUfos()->begin(); i != save->getUfos()->end(); ++i) { if ((*i)->isInBattlescape()) { delete *i; save->getUfos()->erase(i); break; } } // lets see what happens with units for (std::vector<BattleUnit*>::iterator j = battle->getUnits()->begin(); j != battle->getUnits()->end(); ++j) { UnitStatus status = (*j)->getStatus(); UnitFaction faction = (*j)->getFaction(); int value = (*j)->getUnit()->getValue(); Soldier *soldier = dynamic_cast<Soldier*>((*j)->getUnit()); if (status == STATUS_DEAD) { if (faction == FACTION_HOSTILE) { addStat("STR_ALIENS_KILLED", 1, value); } if (faction == FACTION_PLAYER) { if (soldier != 0) { addStat("STR_XCOM_OPERATIVES_KILLED", 1, -value); for (std::vector<Soldier*>::iterator i = base->getSoldiers()->begin(); i != base->getSoldiers()->end(); ++i) { if ((*i) == soldier) { delete (*i); base->getSoldiers()->erase(i); break; } } } else { // non soldier player = tank addStat("STR_TANKS_DESTROYED", 1, -value); } } } else if (status == STATUS_UNCONSCIOUS) { if (faction == FACTION_HOSTILE && (!aborted || (*j)->isInExitArea())) { addStat("STR_LIVE_ALIENS_RECOVERED", 1, value); } } else if (faction == FACTION_PLAYER) { playersSurvived++; if ((*j)->isInExitArea() || !aborted) { playerInExitArea++; (*j)->postMissionProcedures(); } else { addStat("STR_XCOM_OPERATIVES_MISSING_IN_ACTION", 1, -value); for (std::vector<Soldier*>::iterator i = base->getSoldiers()->begin(); i != base->getSoldiers()->end(); ++i) { if ((*i) == dynamic_cast<Soldier*>((*j)->getUnit())) { delete (*i); base->getSoldiers()->erase(i); break; } } } } } if (((playerInExitArea == 0 && aborted) || (playersSurvived == 0)) && craft != 0) { addStat("STR_XCOM_CRAFT_LOST", 1, -200); delete craft; base->getCrafts()->erase(craftIterator); for (std::vector<Soldier*>::iterator i = base->getSoldiers()->begin(); i != base->getSoldiers()->end();) { if ((*i)->getCraft() == craft) { delete (*i); i = base->getSoldiers()->erase(i); } else { ++i; } } _txtTitle->setText(_game->getLanguage()->getString("STR_CRAFT_IS_LOST")); return; } if (!aborted && playersSurvived > 0) // RECOVER UFO : run through all tiles to recover UFO components and items { if (battle->getMissionType() == "STR_BASE_DEFENCE") { _txtTitle->setText(_game->getLanguage()->getString("STR_BASE_IS_SAVED")); } else { _txtTitle->setText(_game->getLanguage()->getString("STR_UFO_IS_RECOVERED")); } for (int i = 0; i < battle->getHeight() * battle->getLength() * battle->getWidth(); ++i) { for (int part = 0; part < 4; part++) { if (battle->getTiles()[i]->getMapData(part)) { switch (battle->getTiles()[i]->getMapData(part)->getSpecialType()) { case UFO_POWER_SOURCE: addStat("STR_UFO_POWER_SOURCE", 1, 1); break; case DESTROY_OBJECTIVE:break; // this is the brain case UFO_NAVIGATION: addStat("STR_UFO_NAVIGATION", 1, 1); break; case ALIEN_FOOD: addStat("STR_ALIEN_FOOD", 1, 1); break; case ALIEN_REPRODUCTION: addStat("STR_ALIEN_REPRODUCTION", 1, 1); break; case ALIEN_ENTERTAINMENT: addStat("STR_ALIEN_ENTERTAINMENT", 1, 1); break; case ALIEN_SURGERY: addStat("STR_ALIEN_SURGERY", 1, 1); break; case UNKNOWN09: addStat("STR_UFO_CONSTRUCTION", 1, 1); break; case ALIEN_ALLOYS: addStat("STR_ALIEN_ALLOYS", 1, 1); break; case EXAM_ROOM: addStat("STR_EXAMINATION_ROOM", 1, 1); break; } } } } // alien alloys recovery values are divided by 10 or devided by 150 in case of an alien base int divider = battle->getMissionType()=="STR_ALIEN_BASE_ASSAULT"?150:10; for (std::vector<DebriefingStat*>::iterator i = _stats.begin(); i != _stats.end(); ++i) { if ((*i)->item == "STR_ALIEN_ALLOYS") { (*i)->qty = (*i)->qty / divider; (*i)->score = (*i)->score / divider; break; } /*if ((*i)->recovery && (*i)->qty > 0) { base->getItems()->addItem((*i)->item, (*i)->qty); }*/ } } else { if (battle->getMissionType() == "STR_BASE_DEFENCE") { _txtTitle->setText(_game->getLanguage()->getString("STR_BASE_IS_LOST")); } else { _txtTitle->setText(_game->getLanguage()->getString("STR_UFO_IS_NOT_RECOVERED")); } } }
//------------------------------------------------------------------------------------- PyObject* Base::__py_pyDestroyEntity(PyObject* self, PyObject* args, PyObject * kwargs) { Base* pobj = static_cast<Base*>(self); if(pobj->initing()) { PyErr_Format(PyExc_AssertionError, "%s::destroy(): %d initing, reject the request!\n", pobj->scriptName(), pobj->id()); PyErr_PrintEx(0); return NULL; } static char * keywords[] = { const_cast<char *> ("deleteFromDB"), const_cast<char *> ("writeToDB"), NULL }; if(pobj->isDestroyed()) { PyErr_Format(PyExc_AssertionError, "%s::destroy: %d is destroyed!\n", pobj->scriptName(), pobj->id()); PyErr_PrintEx(0); return NULL; } if(pobj->creatingCell() || pobj->cellMailbox() != NULL) { PyErr_Format(PyExc_Exception, "%s::destroy: id:%i has cell! creatingCell=%s\n", pobj->scriptName(), pobj->id(), pobj->creatingCell() ? "true" : "false"); PyErr_PrintEx(0); return NULL; } PyObject* pyDeleteFromDB = NULL; PyObject* pyWriteToDB = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OO", keywords, &pyDeleteFromDB, &pyWriteToDB)) { PyErr_Format(PyExc_AssertionError, "%s::destroy: %d ParseTupleAndKeywords(deleteFromDB, &writeToDB) error!\n", pobj->scriptName(), pobj->id()); PyErr_PrintEx(0); return NULL; } bool deleteFromDB = (pyDeleteFromDB != NULL) ? (PyObject_IsTrue(pyDeleteFromDB) ? true : false) : false; bool writeToDB = (pyWriteToDB != NULL) ? (PyObject_IsTrue(pyWriteToDB) ? true : false) : pobj->hasDB(); if(deleteFromDB || writeToDB) { // 有可能已经请求了writeToDB但还未返回写入的dbid // 这种情况需要返回给用户一个错误, 用户可以继续尝试这个操作 if(pobj->hasDB() && pobj->dbid() == 0) { PyErr_Format(PyExc_AssertionError, "%s::destroy: id:%i has db, current dbid is 0. " "please wait for dbmgr to processing!\n", pobj->scriptName(), pobj->id()); PyErr_PrintEx(0); return NULL; } } pobj->onDestroyEntity(deleteFromDB, writeToDB); pobj->destroyEntity(); S_Return; }