Ejemplo n.º 1
0
 public void ResetDectionStatus()
 {
     mPassCount            = 0;
     mFailureCount         = 0;
     mSummaryCount         = 0;
     mDetectionStatusValue = DetectionStatus.NA;
 }
Ejemplo n.º 2
0
 internal DetectionResultSummary(DetectionStatus status, IReadOnlyList <ErrorResponse> errors, IReadOnlyList <VariableState> variableStates, DetectionRequest setupInfo)
 {
     Status         = status;
     Errors         = errors;
     VariableStates = variableStates;
     SetupInfo      = setupInfo;
 }
Ejemplo n.º 3
0
    private void OnHandDetecedFromNative(string data)
    {
        m_DetectionStatus = DetectionStatus.Detected;
        if (string.IsNullOrEmpty(data))
        {
            return;
        }

        string[] temp = data.Split(',');

        if (temp.Length != 2)
        {
            return;
        }

        float x, y = 0.0f;

        if (!Single.TryParse(temp[0], out x) || !Single.TryParse(temp[1], out y))
        {
            return;
        }

        Vector2 vPortSpacePos = new Vector2(x, y);

        if (OnHandDeteced != null)
        {
            OnHandDeteced(this, vPortSpacePos);
        }
    }
        public static DetectionResultSummary DetectionResultSummary(DetectionStatus status = default, IEnumerable <ErrorResponse> errors = null, IEnumerable <VariableState> variableStates = null, DetectionRequest setupInfo = null)
        {
            errors ??= new List <ErrorResponse>();
            variableStates ??= new List <VariableState>();

            return(new DetectionResultSummary(status, errors?.ToList(), variableStates?.ToList(), setupInfo));
        }
Ejemplo n.º 5
0
        // Retourne true si le jet de detection a été reussi.
        public bool FaireJet(Mobile obs, DetectionZone zone)
        {
            DetectionStatus status = DetectionStatus.None;

            double chance = DetectionChance(obs, zone, ref status);

            return(JetEtUpdate(obs, chance, status));
        }
Ejemplo n.º 6
0
        internal DetectionResultSummary(DetectionStatus status, DetectionRequest setupInfo)
        {
            if (setupInfo == null)
            {
                throw new ArgumentNullException(nameof(setupInfo));
            }

            Status         = status;
            Errors         = new ChangeTrackingList <ErrorResponse>();
            VariableStates = new ChangeTrackingList <VariableState>();
            SetupInfo      = setupInfo;
        }
 private void SetDetectionStatus(DetectionStatus status)
 {
     statusLocker.EnterWriteLock();
     try
     {
         detectionStatus = status;
     }
     finally
     {
         statusLocker.ExitWriteLock();
     }
 }
Ejemplo n.º 8
0
        internal static DetectionResultSummary DeserializeDetectionResultSummary(JsonElement element)
        {
            DetectionStatus status = default;
            Optional <IReadOnlyList <ErrorResponse> > errors         = default;
            Optional <IReadOnlyList <VariableState> > variableStates = default;
            DetectionRequest setupInfo = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("status"))
                {
                    status = property.Value.GetString().ToDetectionStatus();
                    continue;
                }
                if (property.NameEquals("errors"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <ErrorResponse> array = new List <ErrorResponse>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(ErrorResponse.DeserializeErrorResponse(item));
                    }
                    errors = array;
                    continue;
                }
                if (property.NameEquals("variableStates"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <VariableState> array = new List <VariableState>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(VariableState.DeserializeVariableState(item));
                    }
                    variableStates = array;
                    continue;
                }
                if (property.NameEquals("setupInfo"))
                {
                    setupInfo = DetectionRequest.DeserializeDetectionRequest(property.Value);
                    continue;
                }
            }
            return(new DetectionResultSummary(status, Optional.ToList(errors), Optional.ToList(variableStates), setupInfo));
        }
Ejemplo n.º 9
0
    public void StartDetect(IntPtr buffer)
    {
        if (buffer == IntPtr.Zero)
        {
            Debug.LogError("buffer is NULL!");
            return;
        }

        bool success = HandDetector_StartDetect(buffer);

        if (success)
        {
            m_DetectionStatus = DetectionStatus.Detecting;
        }
    }
Ejemplo n.º 10
0
 private void Update()
 {
     if (isPhotoMode && _photoUIactive && !isRecordingImage)
     {
         DetectionStatus detectionStatus = CreatureDetection();
         if (detectionStatus == DetectionStatus.Valide)
         {
             feedbackCreatureSeen.sprite = creatureSeen;
         }
         else
         {
             feedbackCreatureSeen.sprite = creatureLost;
         }
     }
 }
Ejemplo n.º 11
0
    public void TakeScreenshot(DetectionStatus detectionStatus)
    {
        audio.PlayOneShot(SoundOneShot.TakePhoto);
        if (flashIsActive)
        {
            hasToFeedbackFlash = true;
            audio.PlayOneShot(SoundOneShot.FlashSoundEffect);
            StartStun(CreaturesFlashed(detectionDistance, detectedHeaderAngle));
        }
        else
        {
            hasToFeedbackFlash = false;
        }

        recordingImageCoroutine = StartCoroutine(RecordFrame(detectionStatus));
    }
Ejemplo n.º 12
0
        // Fait un jet avec les chances, update la vision, et met à jour le status au besoin.
        private bool JetEtUpdate(Mobile obs, double chance, DetectionStatus status)
        {
            ScriptMobile m = mobile as ScriptMobile;

            if (m == null || obs == mobile || !m.Hidden || !mobile.InLOS(m) || status == DetectionStatus.Visible)
            {
                return(false);
            }

            if (obs.AccessLevel > AccessLevel.Player)
            {
                m.Detection.AfficherVisiblePour(obs);
                return(true);
            }

            if (m.AccessLevel > AccessLevel.Player)
            {
                return(false);
            }

            //if (Core.Debug)
            //    obs.SendMessage("Debug -- Chances de detection : " + String.Format("{0:0.00}", chance));

            if (chance >= Utility.RandomDouble())
            {
                m.Detection.AfficherVisiblePour(obs);
                return(true);
            }
            else
            {
                if (status != DetectionStatus.Jet)
                {
                    m.Detection.MettreAJourAlentours(obs, status);
                }
                return(false);
            }
        }
Ejemplo n.º 13
0
 public static string ToSerialString(this DetectionStatus value) => value switch
 {
 public DetectionOutcome(DetectionStatus status, Exception e)
 {
     Status = status;
     Exception = e;
 }
 void mRecognizer_OnDisplayDefaultTarget(DetectionStatus detectionStatus)
 {
     mViewFinder.DisplayDefaultPosition();
 }
 void mRecognizer_OnDisplayNewTarget(Windows.Foundation.Point uleft, Windows.Foundation.Point uright, Windows.Foundation.Point lleft, Windows.Foundation.Point lright, DetectionStatus detectionStatus)
 {
     mViewFinder.DisplayPosition(uleft, uright, lleft, lright, detectionStatus);
 }
        public DetectionOutcome(DetectionStatus status, Exception e)
        {
            Status = status;

            Exception = e;
        }
Ejemplo n.º 18
0
        public bool FaireJet(Mobile obs, double chance)
        {
            DetectionStatus status = DetectionStatus.Jet;

            return(JetEtUpdate(obs, chance * SkillChance(obs), DetectionStatus.Jet));
        }
Ejemplo n.º 19
0
 private void MettreAJourAlentours(Mobile m, DetectionStatus d)
 {
     alentours[m] = d;
 }
Ejemplo n.º 20
0
        private double DetectionChance(Mobile obs, DetectionZone zone, ref DetectionStatus status)
        {
            double chance = SkillChance(obs);

            if (status == DetectionStatus.Jet)
            {
                return(chance);
            }

            try { status = alentours[obs]; }
            catch { alentours.Add(obs, DetectionStatus.None); }

            if (status == DetectionStatus.Visible)
            {
                return(0);
            }

            switch (zone)
            {
            case DetectionZone.Outside:
                chance = BaseChance(zone, false);     // Should never be hit
                break;

            case DetectionZone.CinqTiles:
                switch (status)
                {
                case DetectionStatus.None:
                    chance *= BaseChance(zone, true);
                    status  = DetectionStatus.Tentative5;
                    break;

                case DetectionStatus.Deplacement5:
                    chance *= BaseChance(zone, false);
                    status  = DetectionStatus.Tentative5;
                    break;

                case DetectionStatus.Deplacement1:
                    chance *= BaseChance(zone, false);
                    status  = DetectionStatus.Test5Dep1;
                    break;

                case DetectionStatus.Deplacement0:
                    chance *= BaseChance(zone, false);
                    status  = DetectionStatus.Test5Dep0;
                    break;

                default:
                    chance = 0;         //On a deja tente pour 5 tiles
                    break;
                }
                break;

            case DetectionZone.UneTile:
                switch (status)
                {
                case DetectionStatus.None:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, true)
                                                                , BaseChance(DetectionZone.UneTile, true) });
                    status = DetectionStatus.Tentative1;
                    break;

                case DetectionStatus.Tentative5:
                    chance *= BaseChance(zone, true);
                    status  = DetectionStatus.Tentative1;
                    break;

                case DetectionStatus.Deplacement5:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, true) });
                    status = DetectionStatus.Tentative1;
                    break;

                case DetectionStatus.Deplacement1:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, false) });
                    status = DetectionStatus.Tentative1;
                    break;

                case DetectionStatus.Deplacement0:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, false) });
                    status = DetectionStatus.Test1Dep0;
                    break;

                case DetectionStatus.Test5Dep1:
                    chance *= BaseChance(zone, false);
                    status  = DetectionStatus.Tentative1;
                    break;

                case DetectionStatus.Test5Dep0:
                    chance *= BaseChance(zone, false);
                    status  = DetectionStatus.Test1Dep0;
                    break;

                default:
                    chance = 0;         // On a deja tente pour 1 tile
                    break;
                }
                break;

            case DetectionZone.ZeroTile:
                switch (status)
                {
                case DetectionStatus.None:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, true)
                                                                , BaseChance(DetectionZone.UneTile, true)
                                                                , BaseChance(DetectionZone.ZeroTile, true) });
                    break;

                case DetectionStatus.Tentative5:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.UneTile, true)
                                                                , BaseChance(DetectionZone.ZeroTile, true) });
                    break;

                case DetectionStatus.Tentative1:
                    chance *= BaseChance(DetectionZone.ZeroTile, true);
                    break;

                case DetectionStatus.Deplacement5:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, true)
                                                                , BaseChance(DetectionZone.ZeroTile, true) });
                    break;

                case DetectionStatus.Deplacement1:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, false)
                                                                , BaseChance(DetectionZone.ZeroTile, true) });
                    break;

                case DetectionStatus.Deplacement0:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.CinqTiles, false)
                                                                , BaseChance(DetectionZone.UneTile, false)
                                                                , BaseChance(DetectionZone.ZeroTile, false) });
                    break;

                case DetectionStatus.Test5Dep1:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.UneTile, false)
                                                                , BaseChance(DetectionZone.ZeroTile, true) });
                    break;

                case DetectionStatus.Test5Dep0:
                    chance *= CombinerChanceJets(new double[] { BaseChance(DetectionZone.UneTile, false)
                                                                , BaseChance(DetectionZone.ZeroTile, false) });
                    break;

                case DetectionStatus.Test1Dep0:
                    chance *= BaseChance(DetectionZone.ZeroTile, false);
                    break;
                }
                if (status != DetectionStatus.Visible)
                {
                    status = DetectionStatus.Tentative0;
                }
                break;
            }
            if (chance > 1)
            {
                chance = 1;
            }

            return(chance);
        }
Ejemplo n.º 21
0
 void mRecognizer_OnDisplayNewTarget(Windows.Foundation.Point uleft, Windows.Foundation.Point uright, Windows.Foundation.Point lleft, Windows.Foundation.Point lright, DetectionStatus detectionStatus)
 {
     mViewFinder.DisplayPosition(uleft, uright, lleft, lright, detectionStatus);
 }
Ejemplo n.º 22
0
 void mRecognizer_OnDisplayDefaultTarget(DetectionStatus detectionStatus)
 {
     mViewFinder.DisplayDefaultPosition();
 }
Ejemplo n.º 23
0
    IEnumerator RecordFrame(DetectionStatus detectionStatus)
    {
        isRecordingImage = true;
        string path = Application.dataPath;

        path = path.Substring(0, path.LastIndexOf('/'));
        path = path + "/Screenshots/";
        System.IO.Directory.CreateDirectory(path);
        path = path + "Screenshot_" + System.DateTime.Now.ToString("dd-MM-yy") + "_" + System.DateTime.Now.ToString("HH-mm-ss") + ".png";

        if (hasToFeedbackFlash)
        {
            CameraController.Instance.FlashlightController.ActiveForFlash(true);
        }

        changeActivebeforePhoto(false);
        yield return(new WaitForEndOfFrame()); //Primordial

        changeActivebeforePhoto(true);
        Texture2D renderResult = ScreenCapture.CaptureScreenshotAsTexture();

        byte[] byteArray;
        //TODO ajouter un nouveau controlle pour prendre des screenshot entier
        squareScreenshot = true;
        if (squareScreenshot)
        {
            squareScreenshot = false;
            //Texture2D resultCentered = new Texture2D(Screen.height, Screen.height);
            //resultCentered.SetPixels(renderResult.GetPixels(Mathf.FloorToInt(Screen.width/2) - Mathf.FloorToInt(Screen.height/2), 0, Screen.height, Screen.height));
            Texture2D resultCentered = new Texture2D(Mathf.RoundToInt(Screen.width * squareFactor.x), Mathf.RoundToInt(Screen.height * squareFactor.y));
            resultCentered.SetPixels(renderResult.GetPixels(resultCentered.width / 2, resultCentered.height / 2, resultCentered.width, resultCentered.height));
            resultCentered.Apply();

            byteArray    = resultCentered.EncodeToPNG();
            renderResult = resultCentered;
        }
        else
        {
            byteArray = renderResult.EncodeToPNG();
        }
        Sprite toShowInEcodex = Sprite.Create(renderResult, new Rect(0.0f, 0.0f, renderResult.width, renderResult.height), Vector2.zero);
        bool   newSpecie      = false;
        bool   hasCreature    = creatureDetected != null;

        if (hasCreature)
        {
            newSpecie = EcodexManager.Instance.TakePictureOfCreature(toShowInEcodex, creatureDetected);
        }
        else
        {
            EcodexManager.Instance.TakePicture(toShowInEcodex);
        }

        System.IO.File.WriteAllBytes(path, byteArray);

        yield return(null);

        if (hasToFeedbackFlash)
        {
            CameraController.Instance.FlashlightController.ActiveForFlash(false);
        }

        //Feedback take photo
        whitePicture.color          = Color.white;
        feedbackCreatureSeen.sprite = toShowInEcodex;
        //feedbackCreatureSeen.preserveAspect = true;


        if (!hasCreature)
        {
            switch (detectionStatus)
            {
            case DetectionStatus.NotVisible:
                textFeedback.text = "";
                break;

            case DetectionStatus.TooFar:
                textFeedback.text = "La créature est trop éloignée";
                break;

            case DetectionStatus.FromTheBack:
                textFeedback.text = "La créature n'est pas de face";
                break;

            case DetectionStatus.IsSleep:
                textFeedback.text = "La créature est en train de dormir";
                break;

            case DetectionStatus.Multiple:
                textFeedback.text = "Plusieurs espèces sont sur l'image";
                break;

            case DetectionStatus.Weird:
                textFeedback.text = weridPhrases[UnityEngine.Random.Range(0, weridPhrases.Length)];
                break;

            default:
                textFeedback.text = "";
                break;
            }
        }
        else if (newSpecie)
        {
            textFeedback.text = "<b><color=#" + ColorUtility.ToHtmlStringRGB(creatureDetected.ColorSwap.GetColor()) + ">Nouvelle espèce</color> découverte !</b>\n<size=80%>Ouvrez l'Ecodex : nouvelles infos disponibles</size>";
        }
        else
        {
            textFeedback.text = "<b>Nouvelle photo de <color=#" + ColorUtility.ToHtmlStringRGB(creatureDetected.ColorSwap.GetColor()) + ">" + EcodexManager.Instance.GetUserName(creatureDetected.SpecieID) + "</color>.</b>";
        }

        textFeedback.text += "\n<size=40%>Disponible sur : <u>" + path + "</u></size>";

        if (flashIsActive)
        {
            dayColor.postExposure.value   = 2.5f;
            nightColor.postExposure.value = 2.5f;
        }

        float       totalTime    = 0f;
        const float feedbackTime = 1f;
        float       percentDone  = 0f;

        while (totalTime < feedbackTime)
        {
            totalTime  += Time.deltaTime;
            percentDone = totalTime / feedbackTime;
            Color newCol = whitePicture.color;
            newCol.a           = Mathf.Lerp(1f, 0f, percentDone);
            whitePicture.color = newCol;
            if (hasToFeedbackFlash)
            {
                dayColor.postExposure.value   = Mathf.Lerp(2.5f, postExposureDay, percentDone);
                nightColor.postExposure.value = Mathf.Lerp(2.5f, postExposureNight, percentDone);
            }
            yield return(null);
        }
        whitePicture.color = Color.clear;
        if (hasToFeedbackFlash)
        {
            dayColor.postExposure.value   = postExposureDay;
            nightColor.postExposure.value = postExposureNight;
        }
        yield return(new WaitForSeconds(2f));

        stopRecordingImage();
    }
 public static DetectionResultSummary DetectionResultSummary(DetectionStatus status = default, IReadOnlyList <ErrorResponse> errors = default, IReadOnlyList <VariableState> variableStates = default, DetectionRequest setupInfo = default)
 {
     errors ??= new List <ErrorResponse>();
     variableStates ??= new List <VariableState>();
     return(new DetectionResultSummary(status, errors, variableStates, setupInfo));
 }
Ejemplo n.º 25
0
    private DetectionStatus CreatureDetection()
    {
        creatureDetected = null;
        bool isGhostVisible = false;

        IReadOnlyList <Creature> creatures = CreatureFactory.Instance.AliveCreature;
        //List<Creature> creaturesDetected = new List<Creature>();
        DetectionStatus status = DetectionStatus.NotVisible;

        foreach (Creature creature in creatures)
        {
            Transform target = creature.transform;
            Transform cam    = CameraController.Instance.transform;

            Vector3 screenPoint = Camera.main.WorldToViewportPoint(target.position);
            //TODO utiliser squareFactor
            if (screenPoint.z < 0 || screenPoint.x < 0.25 || screenPoint.x > 0.75f || screenPoint.y < 0.25f || screenPoint.y > 0.75f)
            {
                continue;
            }

            RaycastHit hit;
            if (!Physics.Raycast(cam.position, target.position - cam.position, out hit, 33, LayerMask.GetMask("Creature", "Terrain", "Obstacle")))
            {
                continue;
            }
            if (hit.transform.gameObject.layer != LayerMask.NameToLayer("Creature"))
            {
                continue;
            }

            if (creature.ColorSwap.GetTransparency() < 0.5f)
            {
                isGhostVisible = true;
                continue;
            }

            if (status < DetectionStatus.TooFar)
            {
                status = DetectionStatus.TooFar;
            }

            if (Vector3.Distance(cam.position, target.position) > detectionDistance)
            {
                continue;
            }

            if (status < DetectionStatus.FromTheBack)
            {
                status = DetectionStatus.FromTheBack;
            }

            Vector3 targetHeader = Vector3.ProjectOnPlane(-target.forward, Vector3.up);
            Vector3 camHeader    = Vector3.ProjectOnPlane(cam.forward, Vector3.up);
            if (Vector3.Angle(camHeader, targetHeader) > detectedHeaderAngle)
            {
                continue;
            }

            if (status < DetectionStatus.IsSleep)
            {
                status = DetectionStatus.IsSleep;
            }

            if (creature.currentEmotion == EmotionState.Sleep)
            {
                continue;
            }

            if (!creatureDetected || creatureDetected.SpecieID == creature.SpecieID)
            {
                creatureDetected = creature;
                status           = DetectionStatus.Valide;
            }
            else
            {
                status = DetectionStatus.Multiple;
            }
        }

        if (status == DetectionStatus.NotVisible && isGhostVisible)
        {
            status = DetectionStatus.Weird;
        }

        return(status);
    }