// __gc for MotionState static int destroyMotionState(lua_State* L) { MotionState* mstate = 0; checkUserData(L, "Lusion.MotionState", mstate); mstate->release(); return 0; }
// __gc static int destroyMatrix2(lua_State* L) { Matrix2* matrix = 0; checkUserData(L, "Lusion.Matrix2", matrix); delete matrix; return 0; }
void SS5Player::updateFrame(float dt) { double nextTime = m_nowTime + dt; int currentFrame = getCurrentFrame(); int nextFrame = nextTime * getAnimeFPS(); int seekCount = nextFrame - currentFrame; //順再生 for(int i=0; i < seekCount; ++i){ //通過フレームのイベントのチェックをする int frame = currentFrame + i; frame = ss::wrap<int>(frame, 0, getMaxFrame()); //範囲制限 checkUserData(frame); //ユーザーデータチェック checkEvent(frame); //イベントチェック /*memo:最終フレームなどで止めたいときはここでbreakする必要がある。今はひとまずこのまま*/ } //逆順再生 for(int i=0; i > seekCount; --i){ //通過フレームのイベントのチェックをする int frame = currentFrame + i; frame = ss::wrap<int>(frame, 0, getMaxFrame()); //範囲制限 checkUserData(frame); //ユーザーデータチェック checkEvent(frame); //イベントチェック /*memo:最終フレームなどで止めたいときはここでbreakする必要がある。今はひとまずこのまま*/ } double maxTime = static_cast<double>(getMaxFrame()) / getAnimeFPS(); //下方向に誤差る分には問題ないはず m_nowTime = ss::fwrap<double>(nextTime, 0, maxTime); //範囲内に時間を収める //アニメーションをこのフレームに合わせる setFrame(getCurrentFrame()); }
void SS5Player::play(const AnimeRef* animeRef, int startFrameNo) { SS_ASSERT(animeRef); if (m_currentAnimeRef != animeRef){ m_currentAnimeRef = animeRef; allocParts(animeRef->m_numParts); setPartsParentage(); } setCurrentFrame(startFrameNo); setFrame(startFrameNo); //play実行時に最初のフレームのユーザーデータを確認する checkUserData(startFrameNo); checkEvent(startFrameNo); }
void PanelUserData::update(MyGUI::Widget* _currentWidget) { mCurrentWidget = _currentWidget; if (mCurrentWidget == nullptr) return; WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget); mMultilist->removeAllItems(); for (MyGUI::VectorStringPairs::iterator iterProperty = widgetContainer->mUserString.begin(); iterProperty != widgetContainer->mUserString.end(); ++iterProperty) { if (checkUserData(widgetContainer, (*iterProperty).first)) { mMultilist->addItem(iterProperty->first); mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, iterProperty->second); } } }
void PanelUserData::update(MyGUI::Widget* _currentWidget) { mCurrentWidget = _currentWidget; if (mCurrentWidget == nullptr) return; mMultilist->removeAllItems(); WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget); WidgetContainer::UserDataEnumerator userData = widgetContainer->getUserDataEnumerator(); while (userData.next()) { if (checkUserData(widgetContainer, userData.current().first)) { mMultilist->addItem(userData.current().first); mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, MyGUI::TextIterator::toTagsString(userData.current().second)); } } }