public void TaskRun() { Trace.t(cc.Norm, "Vision TaskRun started"); Program.Pilot.Send(new { Cmd = "SRVO", Value = servoPosition }); if (!Program.PilotString.Contains("com")) { Mq = new MqttClient(Program.PilotString); Trace.t(cc.Norm, string.Format("vision connecting to MQTT @ {0}", Program.PilotString)); Mq.Connect("MMPXY"); Trace.t(cc.Norm, "vision connected"); Mq.MqttMsgPublishReceived += PixyMqRecvd; Mq.Subscribe(new string[] { "robot1/pixyCam" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); } SubState = VisionState.Run; // if finished, exit task while (Program.State != RobotState.Shutdown) { if (SubState == VisionState.Run) if (coneFlag != ConeState.Lost && DateTime.Now > lastSeenTime + lostWaitTime) LostCone(); Program.Delay(100).Wait(); } Trace.t(cc.Warn, "Vision exiting"); SubState = VisionState.Idle; if (Mq != null && Mq.IsConnected) Mq.Disconnect(); }
void FindVisibleTargets() { visibleTargets.Clear(); Collider[] targetsInViewRadius = Physics.OverlapSphere(transform.position, viewRadius, targetMask); for (int i = 0; i < targetsInViewRadius.Length; i++) { Transform target = targetsInViewRadius[i].transform; Vector3 dirToTarget = (target.position - transform.position).normalized; if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle / 2) { float dstToTarget = Vector3.Distance(transform.position, target.position); if (!Physics.Raycast(transform.position, dirToTarget, dstToTarget, obstacleMask)) { if ((target.GetComponent <PlayerController>().GetIsHidden() == false || currentState == VisionState.combat) && target.GetComponent <PlayerController>().GetIsPetrified() == false) { visibleTargets.Add(target); if (currentState == VisionState.idle) { currentState = VisionState.suspicious; markRenderer.enabled = true; } } } } } }
private void UpdateVisibility(VisionState nvs) { if (VisionState != nvs) { VisionState = nvs; if (VisibleObject) { VisibleObject.SetActive(nvs == VisionState.VISIBLE); } if (HiddenObject) { HiddenObject.SetActive(nvs == VisionState.HIDDEN); } if (SeenObject) { SeenObject.SetActive(nvs == VisionState.SEEN); } UpdateParticleSystems(nvs); //foreach (var r in GetComponentsInChildren<Renderer>()) r.enabled = (nvs != VisionState.HIDDEN); foreach (var obj in mapObjects.Values) { ApplyVisibilityToObject(obj); } } }
public void UnseeTile () { if (Vision != VisionState.Visible) return; else Vision = VisionState.Seen; }
IEnumerator FindTargetsWithDelay(float delay) { while (true) { yield return(new WaitForSeconds(delay)); FindVisibleTargets(); if (visibleTargets.Count > 0) { if (currentState == VisionState.suspicious) { float distance = Vector3.Distance(transform.position, visibleTargets[0].position); float partOfRadius = distance / viewRadius; markRenderer.enabled = true; DOTween.To(() => markRenderer.color, x => markRenderer.color = x, suspiciousColor, partOfRadius * 2.0f).OnComplete(() => { currentState = VisionState.alerted; patrolScript.isPatroling = false; }); } if (currentState == VisionState.alerted) { transform.LookAt(visibleTargets[0]); float distance = Vector3.Distance(transform.position, visibleTargets[0].position); float partOfRadius = distance / viewRadius; markRenderer.enabled = true; DOTween.To(() => markRenderer.color, x => markRenderer.color = x, alertedColor, partOfRadius * 5.0f).OnComplete(() => { currentState = VisionState.combat; }); } if (currentState == VisionState.combat) { patrolScript.SetPlayerPosition(visibleTargets[0].position); if (Vector3.Distance(transform.position, visibleTargets[0].position) < 5.0f) { StartCoroutine(PetrifyAnimation()); } } } else { if (isCasting == false) { patrolScript.isPatroling = true; if (currentState != VisionState.idle) // if state is switched { DOTween.To(() => markRenderer.color, x => markRenderer.color = x, idleColor, 2.0f).OnComplete(() => { if (currentState == VisionState.idle) { markRenderer.enabled = false; patrolScript.BackToWaypoints(); } }); } currentState = VisionState.idle; } } } }
public void UseSpecial1(GameObject user) { if (HauntManager.gameState == HauntManager.HauntState.HAUNT) { GamePlayer player = user.GetComponent <GamePlayer> (); if (state == VisionState.READY) { Item ring = RingHaunt.theRing.GetComponent <Item>(); if (ring != null) { this.user = user; if (ring.isHeld) { if (RingHaunt.traitorHasRing) { elapsed = 0; float dist = Vector3.Distance(user.transform.position, RingHaunt.chosenOne.transform.position); if (dist <= viewDist) { highlightTraitor = true; RpcHighlightPlayer(RingHaunt.chosenOne.gameObject, user); player.EndAction(2.0f, "You see the traitor"); player.AddTimedMessage("Vision of traitor active", viewTime); state = VisionState.VISION; } else { player.EndAction(2.0f, "The traitor is too far away to see"); user.GetComponent <GamePlayer> ().AddTimedMessage("Vision on Cooldown", cooldownTime); state = VisionState.COOLDOWN; } } else { player.EndAction(2.0f, "An ally has the ring"); user.GetComponent <GamePlayer> ().AddTimedMessage("Vision on Cooldown", cooldownTime); state = VisionState.COOLDOWN; } } else { highlightTraitor = false; RpcHighlightRing(RingHaunt.theRing, user); player.EndAction(2.0f, "You see the ring"); player.AddTimedMessage("Vision of ring active", viewTime); state = VisionState.VISION; } } } else if (state == VisionState.COOLDOWN) { player.EndAction(0.5f, "Vision on cooldown"); } } }
public void UnseeTile() { if (Vision != VisionState.Visible) { return; } else { Vision = VisionState.Seen; } }
public void SetVisionState(VisionState visionState) { switch (visionState) { case VisionState.Full: light.pointLightOuterRadius = fullVisionRadius; break; case VisionState.InDoor: light.pointLightOuterRadius = 3f; break; case VisionState.Disabled: light.pointLightOuterRadius = 0f; break; } }
// Update is called once per frame void Update() { if (isServer) { if (state == VisionState.COOLDOWN) { elapsed += Time.deltaTime; if (elapsed >= cooldownTime) { elapsed = 0; state = VisionState.READY; } } else if (state == VisionState.VISION) { elapsed += Time.deltaTime; if (highlightTraitor) { RpcHighlightPlayer(RingHaunt.chosenOne.gameObject, user); } else { RpcHighlightRing(RingHaunt.theRing, user); } if (elapsed >= viewTime) { elapsed = 0; state = VisionState.COOLDOWN; user.GetComponent <GamePlayer> ().AddTimedMessage("Vision on Cooldown", cooldownTime); if (highlightTraitor) { RpcDeHighlightPlayer(RingHaunt.chosenOne.gameObject, user); } else { RpcDeHighlightRing(RingHaunt.theRing, user); } } } } }
// Update is called once per frame void Update() { // Get awareness value for currently active state AwarenessState currentState = trollState.GetStateComponent(); //if(currentState.atMax()) //{ // //} // Update awareness distToPlayer = Vector3.Distance(transform.position, player.position); angleToPlayer = Quaternion.FromToRotation(head.forward, player.position - transform.position).eulerAngles.y; angleToPlayer = angleToPlayer > 180 ? angleToPlayer = angleToPlayer - 360 : angleToPlayer; bool awarenessUpdated = UpdateVisionAwareness() || UpdateHearingAwareness() || UpdateSmellAwareness(); if (!awarenessUpdated) { awareness = awareness - currentState.awarenessDecrease; } visionState = VisionState.UNSEEN; if (currentState.checkMin(awareness)) { awareness = currentState.min; } if (currentState.checkMax(awareness)) { awareness = currentState.max; visionState = VisionState.SEEN; } }
private void UpdateParticleSystems(VisionState nvs) { switch (nvs) { case VisionState.HIDDEN: if (HiddenParticleSystem && !HiddenParticleSystem.isPlaying) { HiddenParticleSystem.Play(); } if (SeenParticleSystem && SeenParticleSystem.isPlaying) { SeenParticleSystem.Stop(); } break; case VisionState.SEEN: if (HiddenParticleSystem && HiddenParticleSystem.isPlaying) { HiddenParticleSystem.Stop(); } if (SeenParticleSystem && !SeenParticleSystem.isPlaying) { SeenParticleSystem.Play(); } break; case VisionState.VISIBLE: if (HiddenParticleSystem && HiddenParticleSystem.isPlaying) { HiddenParticleSystem.Stop(); } if (SeenParticleSystem && SeenParticleSystem.isPlaying) { SeenParticleSystem.Stop(); } break; } }
public void SetRenderer(VisionState state) { curState = state; switch (state) { // In Vision case VisionState.Vision: for (int x = 0; x < renderers.Length; x++) { if (x == 0 && renderers[x].material.color == defaultMat[x] && renderers[x].enabled) { break; } renderers[x].material.color = defaultMat[x]; renderers[x].enabled = true; if (hideCursorIcon && cursorObj != null) { cursorObj.enabled = true; } } break; // Discovered case VisionState.Discovered: for (int x = 0; x < renderers.Length; x++) { if (x == 0 && renderers[x].material.color == pastVisibleMat[x] && renderers[x].enabled) { break; } if (pastVisibleMat.Length > x) { renderers[x].material.color = pastVisibleMat[x]; } renderers[x].enabled = !hideObjectWhenNotSeen; if (hideCursorIcon && cursorObj != null) { cursorObj.enabled = true; } } break; // Undiscovered case VisionState.Undiscovered: for (int x = 0; x < renderers.Length; x++) { if (x == 0 && !renderers[x].enabled) { break; } if (hideObject) { renderers[x].enabled = false; } if (hideCursorIcon && cursorObj != null) { cursorObj.enabled = false; } } break; } }
public void SeeTile() { Vision = VisionState.Visible; }
public Cell() { Vision = VisionState.Hidden; }
public void SeeTile () { Vision = VisionState.Visible; }
public Cell () { Vision = VisionState.Hidden; }