public void OnNewFrameDataReady(Object sender, EventArgs args) { DataTransferEventArgs arg = (DataTransferEventArgs)args; int frame = (int)arg.m_data; if (m_player1LatestPositions == null) //first time initial { m_player1LatestPositions = m_dataWarehouse.GetLatestPlayer1Positions(m_inspectWindowSize); //TODO: specify accurate time } else //set data { //initialize data if (m_player1LatestPositions.Count < m_inspectWindowSize) { m_player1LatestPositions.Add(m_dataWarehouse.m_frameData[frame].m_Player1.m_position); return; } else { m_player1LatestPositions.RemoveAt(0); m_player1LatestPositions.Add(m_dataWarehouse.m_frameData[frame].m_Player1.m_position); } //make decision if (isPlayer1MovesInLatestFrame() && !m_isMoving)//split start point { Console.WriteLine("moving"); m_isMoving = true; m_startFrame = frame; } if (!isPlayer1MovesInLatestFrame() && m_isMoving)//stop moving { m_isMoving = false; //NOTIFY dataWarehouse m_endFrame = frame; m_dataWarehouse.SetSegmentationData(m_startFrame, m_endFrame, 1.0f); Console.WriteLine("stop"); } } }