public LogListItem(LogView logView) { InitializeComponent(); m_logView = logView; logView.m_logListItem = this; ListViewItem nameLvi = new ListViewItem(m_logView.m_name); nameLvi.ToolTipText = m_logView.m_baseLogData.Name; nameLvi.Checked = true; nameListView.Items.Add(nameLvi); startFrameNumericUpDown.ValueChanged += new EventHandler(startFrameNumericUpDown_ValueChanged); endFrameNumericUpDown.ValueChanged += new EventHandler(endFrameNumericUpDown_ValueChanged); if (m_logView.m_logData is SocketLogData) { m_trackingButtonToolTip = new ToolTip(); m_trackingState = ETrackingState.Smart; UpdateTracking(); } else { trackingButton.Hide(); } SetFrameNumericUpDowns(); UpdateContents(); Invalidated += new InvalidateEventHandler(LogListItem_Invalidated); }
void SetTrackingState(ETrackingState ts) { m_trackingState = ts; if (!trackingButton.Visible) { return; } switch (m_trackingState) { case ETrackingState.Off: trackingButton.BackColor = SystemColors.Control; trackingButton.ForeColor = SystemColors.ControlText; SetTrackingButtonToolTip("off"); break; case ETrackingState.Smart: trackingButton.BackColor = Color.CornflowerBlue; trackingButton.ForeColor = Color.White; SetTrackingButtonToolTip("smart"); break; case ETrackingState.On: trackingButton.BackColor = Color.LightGreen; trackingButton.ForeColor = SystemColors.ControlText; SetTrackingButtonToolTip("on"); break; } }
//Get the nearest or tracked player distance and change tracking state if necessary void ProcessMinimalDistance(float minDistance, CPlayer nearestPlayer) { if(minDistance > m_exitSoundRange) //Out of sight { if(m_trackingState != ETrackingState.NotTracking) { CSoundEngine.postEvent("TourelleZoneOff", gameObject); } m_trackedPlayer = null; m_trackingState = ETrackingState.NotTracking; } else if(minDistance > m_enterSoundRange) //Player in outward zone { //We don't do anything here... } else if(minDistance > m_range) //Player in inward zone { StartTracking(nearestPlayer); m_trackingState = ETrackingState.PlayerInTrackingZone; } else //Player in firing range { StartTracking(nearestPlayer); m_trackingState = ETrackingState.PlayerInFiringZone; } }
void IncrementTrackingState() { m_trackingState += 1; if (m_trackingState >= ETrackingState.Num) { m_trackingState = ETrackingState.Off; } }
internal extern static Boolean PXCMTracker_IsTracking(ETrackingState state);
/// Returns TRUE if the current state is actively tracking (valid pose information is available) public static Boolean IsTracking(ETrackingState state) { return PXCMTracker_IsTracking(state); }
/// Returns TRUE if the current state is actively tracking (valid pose information is available) public static Boolean IsTracking(ETrackingState state) { return(PXCMTracker_IsTracking(state)); }
internal extern static Boolean PXCMTracker_IsTracking(ETrackingState state);
// Update is called once per frame void Update() { if(m_trackingState != ETrackingState.NotTracking) { Vector2 diff = m_trackedPlayer.transform.position - transform.position; float destAngle = Mathf.Rad2Deg * Mathf.Atan2(diff.y, diff.x) + 180; float sourceAngle = transform.rotation.eulerAngles.z; double crossProductSign = Vector3.Cross(transform.right * -1 /*"forward" of the object"*/, diff).z; float dist = Mathf.Abs(destAngle - sourceAngle); if((m_angularSpeed / dist) > m_threshold) { m_angularSpeed = m_threshold * dist; } else m_angularSpeed += m_accelerationFactor; float rotationAngle = Mathf.Min(m_angularSpeedMax, Mathf.Min(m_angularSpeed, dist)); m_angularSpeed = rotationAngle; if(crossProductSign < 0) rotationAngle *= -1; //Debug.Log(Mathf.Abs(destAngle- sourceAngle)); //angle *= angleDiff>180 ? -1 : 1; //angle += transform.rotation.eulerAngles.z; transform.rotation = Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z + rotationAngle); CSoundEngine.setRTPC("Engine_Speed", m_angularSpeed / m_angularSpeedMax, gameObject); } if(m_trackingState == ETrackingState.PlayerInFiringZone && m_angularSpeed < m_firingWindows) { this.GetComponent<CLanceur>().enabled = true; } else { this.GetComponent<CLanceur>().enabled = false; } //Update tracking info if(m_trackingState == ETrackingState.NotTracking){ DetectPlayer(); } else { //Check if the player is still in range float dist = (m_trackedPlayer.transform.position - transform.position).magnitude; if(dist > m_exitSoundRange) { DetectPlayer(); } else if(dist > m_range) { m_trackingState = ETrackingState.PlayerInTrackingZone; } else { m_trackingState = ETrackingState.PlayerInFiringZone; } } }