void AddVelocityCurrPos(struct Tracker_Windows *window){ struct WBlocks *wblock=window->wblock; struct LocalZooms *realline= wblock->reallines[wblock->curr_realline]; int subtrack=window->curr_track_sub; if(-1==subtrack) return; ADD_UNDO(Notes_CurrPos(window)); struct Notes *note = FindNoteOnSubTrack( wblock->wtrack, subtrack, &realline->l.p ); if(note==NULL) return; AddVelocity( root->standardvel, &realline->l.p, note ); #if !USE_OPENGL ClearTrack(window,wblock,wblock->wtrack,wblock->top_realline,wblock->bot_realline); UpdateWTrack(window,wblock,wblock->wtrack,wblock->top_realline,wblock->bot_realline); #endif }
static void AddFXNodeLineCurrPosInternal(struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, struct FX *fx, const Place *place, float val){ Undo_FXs_CurrPos(window); struct FXs *fxs=ListFindElement1_r0(&wtrack->track->fxs->l,fx->num); if (fxs==NULL){ Place p2; int realline=FindRealLineFor(wblock,0,place); if(realline>=wblock->num_reallines-5){ PlaceSetLastPos(wblock->block,&p2); }else{ PlaceCopy(&p2,&wblock->reallines[wblock->curr_realline+3]->l.p); } AddNewTypeOfFxNodeLine(wblock, wtrack, fx, &p2, val); } AddFXNodeLine( window,wblock,wtrack, fx->num, val, place ); #if !USE_OPENGL UpdateFXNodeLines(window,wblock,wtrack); ClearTrack(window,wblock,wtrack,wblock->top_realline,wblock->bot_realline); UpdateWTrack(window,wblock,wtrack,wblock->top_realline,wblock->bot_realline); #endif }
struct Pitches *AddPitch(struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, struct Notes *note, Place *place, float notenum){ struct Pitches *pitch = talloc(sizeof(struct Pitches)); PlaceCopy(&pitch->l.p,place); pitch->note = notenum; //pitch->note_note = note; int pos; PC_Pause(); { pos=ListAddElement3_ns(¬e->pitches, &pitch->l); }PC_StopPause(); if(pos==-1) return NULL; #if !USE_OPENGL ClearTrack(window,wblock,wtrack,wblock->top_realline,wblock->bot_realline); UpdateWTrack(window,wblock,wtrack,wblock->top_realline,wblock->bot_realline); #endif return pitch; }
void CameraTrackSettingDialog::OnLoadTrack(wxCommandEvent& event) { wxFileDialog fileDialog(this, _("Load track file"), "", "", "Track files (*.track)|*.track", wxOPEN | wxFILE_MUST_EXIST); if (fileDialog.ShowModal() != wxID_OK) return; // 先清除当前的轨迹 ClearTrack(); std::ifstream stream; stream.open( fileDialog.GetPath().c_str() ); if (stream) { Ogre::DataStreamPtr ifStream( new Ogre::FileStreamDataStream(&stream, false) ); Ogre::String line; line = ifStream->getAsString(); Ogre::StringVector paras = Ogre::StringUtil::split(line, ","); if (paras.size() >= 2) { float length = Ogre::StringConverter::parseReal(paras[0]); if (!mCameraNode) { mCameraNode = mSceneManipulator->getBaseSceneNode()->createChildSceneNode(); } if (mTrackClear) { mCameraAnimation = mSceneManipulator->getSceneManager()->createAnimation("CameraTrack", length); // Spline it for nice curves mCameraAnimation->setInterpolationMode(Ogre::Animation::IM_SPLINE); // Create a track to animate the camera's node mCameraTrack = mCameraAnimation->createNodeTrack(0, mCameraNode); mCameraAnimState = mSceneManipulator->getSceneManager()->createAnimationState("CameraTrack"); mTrackClear = false; } unsigned int keyCount = Ogre::StringConverter::parseUnsignedInt(paras[1]); for (unsigned int i=0; i<keyCount; ++i) { Ogre::Vector3 pos = Ogre::StringConverter::parseVector3(paras[2 + i*3]); Ogre::Quaternion ori = Ogre::StringConverter::parseQuaternion(paras[3 + i*3]); float time = Ogre::StringConverter::parseReal(paras[4 + i*3]); Ogre::TransformKeyFrame* key = mCameraTrack->createNodeKeyFrame(time); // startposition key->setTranslate(pos); key->setRotation(ori); } RefreshCodeText(); } } }
void CameraTrackSettingDialog::OnClearPoints(wxCommandEvent& event) { ClearTrack(); }