|
|
|
|
using UnityEngine;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using UnityEngine.SceneManagement;
|
|
|
|
|
|
|
|
|
|
public class SceneOutcomeManager : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public static SceneOutcomeManager Instance;
|
|
|
|
|
|
|
|
|
|
[Header("UI Images")]
|
|
|
|
|
public GameObject notSuspiciousImage;
|
|
|
|
|
public GameObject alwaysReportImage;
|
|
|
|
|
public GameObject understandPhishingImage;
|
|
|
|
|
|
|
|
|
|
[Header("Camera Movement")]
|
|
|
|
|
public Transform cameraTarget;
|
|
|
|
|
public float cameraMoveSpeed = 1.5f;
|
|
|
|
|
public Camera mainCamera;
|
|
|
|
|
public Transform teacherTarget;
|
|
|
|
|
public GameObject DebriefObj;
|
|
|
|
|
public GameObject LaptopCanvas;
|
|
|
|
|
private void Awake()
|
|
|
|
|
{
|
|
|
|
|
Instance = this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Reported(EmailData data)
|
|
|
|
|
{
|
|
|
|
|
if (data.isPhishing)
|
|
|
|
|
{
|
|
|
|
|
understandPhishingImage.SetActive(true);
|
|
|
|
|
StartCoroutine(MoveCameraToDebrief());
|
|
|
|
|
WorldTimelineManager.Instance.SnapshotCurrentSequence();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
notSuspiciousImage.SetActive(true);
|
|
|
|
|
// ✅ No camera or timeline
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Clicked(EmailData data)
|
|
|
|
|
{
|
|
|
|
|
if (data.isPhishing)
|
|
|
|
|
{
|
|
|
|
|
Debug.Log("❌ SIMULATION FAILED – CREDENTIALS STOLEN");
|
|
|
|
|
understandPhishingImage.SetActive(true);
|
|
|
|
|
StartCoroutine(MoveCameraToDebrief());
|
|
|
|
|
WorldTimelineManager.Instance.SnapshotCurrentSequence();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Debug.Log("Clicked safe link.");
|
|
|
|
|
// Optional: You can add a "well done" feedback here if desired
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Ignored(EmailData data)
|
|
|
|
|
{
|
|
|
|
|
if (data.isPhishing)
|
|
|
|
|
{
|
|
|
|
|
alwaysReportImage.SetActive(true);
|
|
|
|
|
StartCoroutine(MoveCameraToDebrief());
|
|
|
|
|
WorldTimelineManager.Instance.SnapshotCurrentSequence();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// ✅ Not phishing + Ignored → Do nothing
|
|
|
|
|
Debug.Log("Ignored a safe email. No feedback triggered.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void Restarter()
|
|
|
|
|
{
|
|
|
|
|
SceneManager.LoadScene(0);
|
|
|
|
|
}
|
|
|
|
|
private IEnumerator MoveCameraToDebrief()
|
|
|
|
|
{
|
|
|
|
|
DebriefObj.SetActive(true);
|
|
|
|
|
yield return new WaitForSeconds(2);
|
|
|
|
|
|
|
|
|
|
if (mainCamera == null || cameraTarget == null || teacherTarget == null)
|
|
|
|
|
yield break;
|
|
|
|
|
|
|
|
|
|
Vector3 startPos = mainCamera.transform.position;
|
|
|
|
|
Quaternion startRot = mainCamera.transform.rotation;
|
|
|
|
|
Quaternion finalRot = cameraTarget.rotation;
|
|
|
|
|
|
|
|
|
|
float duration = 2f;
|
|
|
|
|
float t = 0;
|
|
|
|
|
|
|
|
|
|
while (t < 1)
|
|
|
|
|
{
|
|
|
|
|
t += Time.deltaTime / duration;
|
|
|
|
|
|
|
|
|
|
// Smooth position interpolation
|
|
|
|
|
mainCamera.transform.position = Vector3.Lerp(startPos, cameraTarget.position, t);
|
|
|
|
|
|
|
|
|
|
if (t < 0.4f)
|
|
|
|
|
{
|
|
|
|
|
LaptopCanvas.SetActive(false);
|
|
|
|
|
// First half: look at teacher
|
|
|
|
|
Quaternion lookAtTeacher = Quaternion.LookRotation(teacherTarget.position - mainCamera.transform.position);
|
|
|
|
|
mainCamera.transform.rotation = Quaternion.Slerp(mainCamera.transform.rotation, lookAtTeacher, Time.deltaTime * 5f);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// Second half: rotate towards final camera rotation
|
|
|
|
|
float rotT = (t - 0.4f) * 2f; // Normalize from 0–1 for second half
|
|
|
|
|
mainCamera.transform.rotation = Quaternion.Slerp(mainCamera.transform.rotation, finalRot, rotT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Snap to ensure exact final values
|
|
|
|
|
mainCamera.transform.position = cameraTarget.position;
|
|
|
|
|
mainCamera.transform.rotation = finalRot;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|