Пример #1
0
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

}
Пример #2
0
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
}
Пример #3
0
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(&note->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();
}