Esempio n. 1
1
        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();
        }
Esempio n. 2
0
    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;
                        }
                    }
                }
            }
        }
    }
Esempio n. 3
0
 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);
         }
     }
 }
Esempio n. 4
0
		public void UnseeTile ()
		{
			if (Vision != VisionState.Visible)
				return;
			else
				Vision = VisionState.Seen;
		}
Esempio n. 5
0
    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;
                }
            }
        }
    }
Esempio n. 6
0
    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");
            }
        }
    }
Esempio n. 7
0
 public void UnseeTile()
 {
     if (Vision != VisionState.Visible)
     {
         return;
     }
     else
     {
         Vision = VisionState.Seen;
     }
 }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
    // 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);
                    }
                }
            }
        }
    }
Esempio n. 10
0
    // 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;
        }
    }
Esempio n. 11
0
    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;
        }
    }
Esempio n. 12
0
        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;
            }
        }
Esempio n. 13
0
 public void SeeTile()
 {
     Vision = VisionState.Visible;
 }
Esempio n. 14
0
 public Cell()
 {
     Vision = VisionState.Hidden;
 }
Esempio n. 15
0
		public void SeeTile ()
		{
			Vision = VisionState.Visible;
		}
Esempio n. 16
0
		public Cell ()
		{
			Vision = VisionState.Hidden;
		}