Skip to content
Snippets Groups Projects
Select Git revision
  • b81f13129f37be64536b4dca91e85a8a13d37a4a
  • GazeAssistStudy21 default protected
2 results

GameManager.cs

Blame
  • user avatar
    6brosius authored
    b81f1312
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    GameManager.cs 5.82 KiB
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    public class GameManager : MonoBehaviour
    {
        public int ThrowsInTrial;
        public enum Condition { Motor, Gaze, Motor2Gaze, Gaze2Motor, BullsEye2Motor, Motor2BullsEye }; //Options to select Condition that shall be Played in Unity
        public Condition condition;
        public enum Hand { LeftHand, RightHand };           //select Hand that user is using
        public Hand hand;
        public bool SpawnDebugPoints;                   //Debug Points shall be displayed or not?
        public int SubjectID;                             //Field to enter SUbj ID
        public String ExpName;
        private int Points;                 
        public int ThrowCounter;
        private bool first;
        public int ActiveTargetNr;
        public bool ActGame;
       
    
        private string SysTimestampGamestart;
        private string GameTimestampstart;
        private string GameTimestampEnd;
        private string SysTimestampGameEnd;
    
        public Material BWMaterial;
        public Material ColMaterial;
    
        public GameObject Ball;
        public GameObject Punkte;
        public GameObject Wuerfe;
        public GameObject TargetPodest;
        public GameObject StudyEndText;
    
        public int oldTarg;
    
    
        public static GameManager instance;
    
        public scri clock;
    
    
        private System.Random rndm;
    
        // used to start the timer only when player throws first ball
        public static bool startTimer;
    
        private void Awake()
        {
            if (instance != null && instance != this)
            {
                Destroy(this.gameObject);
            }
            else
            {
                instance = this;
            }
    
            ThrowCounter = 0;
            ActGame = false;
            first = true;
    
            StudyEndText.SetActive(false);
    
            rndm = new System.Random();
    
            RecordingController.Instance.SubjectID = SubjectID;
            RecordingController.Instance.ExperimentName = ExpName;
    
        }
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetKeyDown("s"))      //Press Key S to start game / spawn Ball
            {
                StartGame();
                
    
            }
    
            if (Input.GetKeyDown("e"))          //Press E to force Game to quit
            {
                EndGame();
                
            }
            if (Input.GetKeyDown("r"))              //Press R to reset the Ball
            {
                Ballmanager.instance.ForceBallReset(Ball);
                
            }
    
            if (ThrowCounter > (ThrowsInTrial-1) && ActGame == true) //Automatically end Game after desired number of throws have been reached
            {
                EndGame();           
            }
    
     
        }
    
    
    
        private void StartGame()  //Set values and initiates everything needed to start the game
        {
            ActGame = true;
            StudyEndText.SetActive(false);
            Debug.Log("Started the Game @" + DateTime.Now);
            Ball.SetActive(true);
            SysTimestampGamestart = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
            GameTimestampstart = Time.time.ToString();
            clock.gameStarted = true;
            NewRound();
    
        }
    
        private void EndGame() //Set values and everything to force end the Game also save the Data
        {
            ActGame = false;
            StudyEndText.SetActive(true);
            Debug.Log("Ended the Game @" + DateTime.Now);
            SysTimestampGameEnd = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
            GameTimestampEnd = Time.time.ToString();
            clock.gameFinished = true;
            Ball.SetActive(false);
            MaterialManager.instance.DeactivateTarg();
            EyeTrackingCSV_Recorder.instance.EyeTrackingDataBuffer.Add(EyeTrackingCSV_Recorder.instance.CaptureStudyInfo(SysTimestampGameEnd, GameTimestampEnd, "GameEnd", 99));
            //ThrowCounter = 0;
        }
    
        private void NewRound()     //Method that handles everything needed to 
        {
            oldTarg = ActiveTargetNr;
            ActionHandler.instance.lockedGazePoint = Vector3.zero;
            ActionHandler.instance.targetActButtonPress = false;
            if (first)
            {
                Ballmanager.instance.ready4nextRound = true;
                EyeTrackingCSV_Recorder.instance.EyeTrackingDataBuffer.Add(EyeTrackingCSV_Recorder.instance.CaptureStudyInfo(SysTimestampGamestart, GameTimestampstart, "GameStart", ActiveTargetNr));
                first = false;
            }
            else
            {
                if (ActGame)
                {
                    EyeTrackingCSV_Recorder.instance.EyeTrackingDataBuffer.Add(EyeTrackingCSV_Recorder.instance.CaptureStudyInfo(SysTimestampGamestart, GameTimestampstart, "NewRound", ActiveTargetNr));
    
                    StartCoroutine(Ballmanager.instance.ResetBall(Ballmanager.instance.BallCollider));
                    
                }
            }
        }
    
        public void BallhitTarget()
        {
            UpdateGameValues();
            
            if (ThrowCounter < ThrowsInTrial)
            {
                
                NewRound();
            }
            else
            {
                StudyEndText.SetActive(true);
            }
        }
    
        public void SetThrowCounter(int incrby)
        {
            ThrowCounter = ThrowCounter + incrby;
            Counter.wuerfe = ThrowCounter;
        }
    
        private void SetPointCounter(int pt)
        {
            points.Points = Points;
        }
    
        private int GetThrowCounter()
        {
            return ThrowCounter;
        }
    
        private void UpdateGameValues()
        {
            
            int PointsThisRound = ScoreCalc.instance.DistanceToPoints(ScoreCalc.instance.CalcDistancetoBullsEye(Ball.transform.position, ActiveTargetNr));
            Points = ScoreCalc.instance.sumScore(PointsThisRound);
            MainStudy_Recorder.instance.ScoreperRound = PointsThisRound;
            SetPointCounter(Points);
        }
    }