public void ResetDectionStatus() { mPassCount = 0; mFailureCount = 0; mSummaryCount = 0; mDetectionStatusValue = DetectionStatus.NA; }
internal DetectionResultSummary(DetectionStatus status, IReadOnlyList <ErrorResponse> errors, IReadOnlyList <VariableState> variableStates, DetectionRequest setupInfo) { Status = status; Errors = errors; VariableStates = variableStates; SetupInfo = setupInfo; }
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)); }
// 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)); }
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(); } }
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)); }
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; } }
private void Update() { if (isPhotoMode && _photoUIactive && !isRecordingImage) { DetectionStatus detectionStatus = CreatureDetection(); if (detectionStatus == DetectionStatus.Valide) { feedbackCreatureSeen.sprite = creatureSeen; } else { feedbackCreatureSeen.sprite = creatureLost; } } }
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)); }
// 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); } }
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 bool FaireJet(Mobile obs, double chance) { DetectionStatus status = DetectionStatus.Jet; return(JetEtUpdate(obs, chance * SkillChance(obs), DetectionStatus.Jet)); }
private void MettreAJourAlentours(Mobile m, DetectionStatus d) { alentours[m] = d; }
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); }
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)); }
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); }