Exemplo n.º 1
0
    protected IEnumerator CycleTurn()
    {
        Debug.Log("Preparing Turn");

        foreach (Sequence s in Sequences)
        {
            if (!s.isReadyForTurnStart)
            {
                yield return(new WaitForSeconds(0.25f));
            }
        }

        while (!Nucleobase_View.allAtDestination())
        {
            yield return(new WaitForSeconds(0.25f));
        }

        Debug.Log("Nucleobases are ready");
        NucleobasesReadyEvent.Invoke();

        while (!LeftEnzyme.isReadyForTurnStart)
        {
            yield return(new WaitForSeconds(0.25f));
        }

        while (!RightEnzyme.isReadyForTurnStart)
        {
            yield return(new WaitForSeconds(0.25f));
        }

        Debug.Log("Enzymes are ready");
        EnzymesReadyEvent.Invoke();
    }
Exemplo n.º 2
0
    public void EnzymesAI()
    {
        Nucleobase_View NucleobaseToComplement = Nucleobase_View.GetNucleobaseAtPosition(NucleobaseToComplementMarker.position);

        Nucleobase.types goodType = NucleobaseToComplement.getNucleobaseComplementType();

        Nucleobase_View NucleobaseToPluck_1 = null;
        Nucleobase_View NucleobaseToPluck_2 = null;

        Pluckables.ResetAvailables();

        if (Random.Range(0, 2) == 0)
        {
            NucleobaseToPluck_1 = Pluckables.GetNucleobaseOfType(goodType);
            NucleobaseToPluck_2 = Pluckables.GetRandomNucleobase();
        }
        else
        {
            NucleobaseToPluck_1 = Pluckables.GetRandomNucleobase();
            NucleobaseToPluck_2 = Pluckables.GetNucleobaseOfType(goodType);
        }


        if (NucleobaseToPluck_1 == null)
        {
            Debug.Log("First pluckable is null! Trying a random one.");
            NucleobaseToPluck_1 = Pluckables.GetRandomNucleobase();
        }

        if (NucleobaseToPluck_2 == null)
        {
            Debug.Log("Second pluckable is null! Trying a random one.");
            NucleobaseToPluck_2 = Pluckables.GetRandomNucleobase();
        }

        if (NucleobaseToPluck_1 == null || NucleobaseToPluck_2 == null)
        {
            Debug.LogError("Out of Nucleobases to pluck !?!?");
            return;
        }



        if (NucleobaseToPluck_1.transform.position.x < NucleobaseToPluck_2.transform.position.x)
        {
            LeftEnzyme.SelectNucleobase(NucleobaseToPluck_1);
            leftHasGoodAnswer = (NucleobaseToPluck_1.getNucleobaseType() == goodType);

            RightEnzyme.SelectNucleobase(NucleobaseToPluck_2);
            rightHasGoodAnswer = (NucleobaseToPluck_2.getNucleobaseType() == goodType);
        }
        else
        {
            LeftEnzyme.SelectNucleobase(NucleobaseToPluck_2);
            leftHasGoodAnswer = (NucleobaseToPluck_2.getNucleobaseType() == goodType);

            RightEnzyme.SelectNucleobase(NucleobaseToPluck_1);
            rightHasGoodAnswer = (NucleobaseToPluck_1.getNucleobaseType() == goodType);
        }
    }
Exemplo n.º 3
0
    public bool isReadyForTurnStart()
    {
        foreach (Sequence s in Sequences)
        {
            if (!s.isReadyForTurnStart)
            {
                return(false);
            }
        }

        if (!Nucleobase_View.allAtDestination())
        {
            return(false);
        }

        if (!LeftEnzyme.isReadyForTurnStart)
        {
            return(false);
        }

        if (!RightEnzyme.isReadyForTurnStart)
        {
            return(false);
        }

        return(true);
    }
Exemplo n.º 4
0
 public void SelectNucleobase(Nucleobase_View nucleobaseToPluck)
 {
     this.nucleobaseToPluck = nucleobaseToPluck;
     isReadyForTurnStart    = false;
     movementController.GoTo(nucleobaseToPluck.transform, gameController.cycleMovementDuration);
     StartCoroutine(SetReadyWhenDestinationReached());
 }
Exemplo n.º 5
0
    public Nucleobase_View SpawnRandomNucleobase()
    {
        Nucleobase_View newRandomNucleobase = null;

        if (nucleobaseTypesToSpawn.Count == 0)
        {
            nucleobaseTypesToSpawn.Add(Nucleobase.types.A);
            nucleobaseTypesToSpawn.Add(Nucleobase.types.C);
            nucleobaseTypesToSpawn.Add(Nucleobase.types.G);
            nucleobaseTypesToSpawn.Add(Nucleobase.types.T);
        }

        int index = Random.Range(0, nucleobaseTypesToSpawn.Count);

        newRandomNucleobase = GameController.GetInstance().SpawnNucleobaseFromType(nucleobaseTypesToSpawn[index]);
        nucleobaseTypesToSpawn.RemoveAt(index);
        return(newRandomNucleobase);
    }
Exemplo n.º 6
0
    public void NextTurn()
    {
        isReadyForTurnStart = false;


        Nucleobase_View newRandomNucleobase = SpawnRandomNucleobase();

        SetupNewNucleobase(newRandomNucleobase);

        if (complement)
        {
            newRandomNucleobase = GameController.GetInstance().SpawnNucleobaseFromType(newRandomNucleobase.getNucleobaseComplementType());
            SetupNewNucleobase(newRandomNucleobase);
            newRandomNucleobase.transform.Translate(0, 6, 0);
            newRandomNucleobase.transform.Rotate(180, 0, 0);
        }

        isReadyForTurnStart = true;
    }
Exemplo n.º 7
0
    public void Preload()
    {
        isReadyForTurnStart = false;

        GameController  gc = GameController.GetInstance();
        Nucleobase_View newRandomNucleobase = null;
        Vector3         pos = SpawnMarker.position;

        int failSafeCounter = 0;         // to prevent infinite loops

        while (true)
        {
            newRandomNucleobase = SpawnRandomNucleobase();
            SetupNewNucleobase(newRandomNucleobase);
            newRandomNucleobase.transform.position = pos;

            if (complement)
            {
                newRandomNucleobase = gc.SpawnNucleobaseFromType(newRandomNucleobase.getNucleobaseComplementType());
                SetupNewNucleobase(newRandomNucleobase);
                newRandomNucleobase.transform.position = pos;
                newRandomNucleobase.transform.Translate(0, 6, 0);
                newRandomNucleobase.transform.Rotate(180, 0, 0);
            }

            if (Vector3.Distance(pos, ActionMarker.position) <= 0.1f)
            {
                break;
            }

            if (++failSafeCounter >= 30)
            {
                Debug.LogError("FailSafeCounter reached when preloading sequence " + this.gameObject.name);
                break;
            }

            pos += movementDirection * 10;
        }
        ;

        isReadyForTurnStart = true;
    }
Exemplo n.º 8
0
 public void SetupNewNucleobase(Nucleobase_View newRandomNucleobase)
 {
     newRandomNucleobase.Setup (SpawnMarker.position, SpawnMarker.rotation, movementDirection);
     newRandomNucleobase.transform.parent = transform;
 }
Exemplo n.º 9
0
 public Nucleobase_View GetNucleobaseToComplement()
 {
     return(Nucleobase_View.GetNucleobaseAtPosition(NucleobaseToComplementMarker.position));
 }
Exemplo n.º 10
0
 public void SetupNewNucleobase(Nucleobase_View newRandomNucleobase)
 {
     newRandomNucleobase.Setup(SpawnMarker.position, SpawnMarker.rotation, movementDirection);
     newRandomNucleobase.transform.parent = transform;
 }