private void Awake()
 {
     atomsManager  = FindObjectOfType <AtomsManager>();
     _levelManager = FindObjectOfType <LevelManager>();
     emitter       = FindObjectOfType <EmitterCone>();
     arrows        = GameObject.Find("Arrows");
 }
Beispiel #2
0
    private List <Vertex>[] VertexListToAdjencyList(Vertex[] vertexList)
    {
        List <Vertex>[] ris = new List <Vertex> [AtomsManager.GetN()];

        //inizializza liste
        for (int i = 0; i < ris.Length; i++)
        {
            ris[i] = new List <Vertex>();
        }

        for (int i = 0; i < ris.Length; i++)
        {
            foreach (var vertex in vertexList)
            {
                if (vertex.Parent == i)
                {
                    ris[i].Add(vertexList[vertex.V]);
                }
            }
        }

        foreach (var father in ris)
        {
            foreach (var child in father)
            {
                Debug.Log($"Father {child.Parent}, child {child.V}, distance {child.Key}");
            }
        }

        return(ris);
    }
Beispiel #3
0
    private void Start()
    {
        detector         = FindObjectOfType <Detector>();
        renderer         = GetComponent <Renderer>();
        renderer.enabled = true;
        ChangeMaterial(0);

        _collider         = GetComponent <Collider>();
        _collider.enabled = false;

        atomsManager    = FindObjectOfType <AtomsManager>();
        solutionManager = FindObjectOfType <SolutionManager>();
        moleculeManager = FindObjectOfType <MoleculeManager>();


        controlGizmo = FindObjectOfType <ControlGizmo>();
        controlGizmo.DisableElements();

        dottedLineHoriz                 = GameObject.Find("DottedLineHoriz").GetComponent <DottedLine>();
        dottedLineHorizRenderer         = dottedLineHoriz.GetComponent <Renderer>();
        dottedLineHorizRenderer.enabled = false;

        dottedLineVert         = GameObject.Find("DottedLineVert").GetComponent <DottedLine>();
        dottedLineVertRenderer = dottedLineVert.GetComponent <Renderer>();
        dottedLineVertMaterial = dottedLineVertRenderer.material;
        dottedLineVertMaterial.SetColor(_EmissionColor, Color.red);

        dottedLineVertRenderer.enabled = false;

        atomsManager.AddAtom(this);
    }
 // Start is called before the first frame update
 void Start()
 {
     atomFather              = transform.parent;
     atomsManager            = FindObjectOfType <AtomsManager>();
     centralCell             = FindObjectOfType <CentralCell>();
     originPos               = transform.position;
     renderer                = GetComponent <Renderer>();
     renderer.enabled        = true;
     renderer.sharedMaterial = materials[0];
     parent = GetComponentInParent <Atom>();
     //atomsManagerRep.AddAtom(this);
 }
    private void Awake()
    {
        hint = GameObject.Find("HintButton").GetComponent<Button>();
        canvas = GameObject.Find("Canvas");

        detector = FindObjectOfType<Detector>();
        solutionDetector = FindObjectOfType<SolutionDetector>();
        emitterCone = FindObjectOfType<EmitterCone>();
        emitterConeSol = FindObjectOfType<EmitterConeSol>();
        atomsManager = FindObjectOfType<AtomsManager>();
        solutionManager = FindObjectOfType<SolutionManager>();
        moleculeManager = FindObjectOfType<MoleculeManager>();
        wave = FindObjectOfType<Wave>();
        hintArrow = FindObjectOfType<HintArrow>();
    }
Beispiel #6
0
 void Awake()
 {
     atomManager = FindObjectOfType <AtomsManager>();
     centralCell = FindObjectOfType <CentralCell>();
     for (float x = -1.5f; x < 2f; x += 1.5f)
     {
         for (float y = -1.5f; y < 2f; y += 1.5f)
         {
             if (x != 0 || y != 0)
             {
                 atomsSpawnPositions.Add(atomManager.GetK() > 5
                     ? new Vector3(0, y * (atomManager.GetK() - 5), x * (atomManager.GetK() - 5))
                     : new Vector3(0, y, x));
             }
         }
     }
 }
Beispiel #7
0
    private void EnforceMolecularBonds(Vertex v)
    {
        Vector3 f = AtomsManager.GetAtoms()[v.V - 1].transform.localPosition;
        Vector3 p;

        if (v.Parent == 0)
        {
            p = Vector3.zero; // il parent è il pivot
        }
        else
        {
            p = AtomsManager.GetAtoms()[v.Parent - 1].transform.localPosition;
        }

        Vector3 d = Vector3.Normalize(f - p);

        Debug.Log(v.Key);
        Vector3 newF = p + d * ((float)v.Key / 10);

        AtomsManager.GetAtoms()[v.V - 1].transform.localPosition = newF;
        allAtomsPositions[v.V] = newF;
        Debug.Log("enforce");
    }
Beispiel #8
0
    private void MoleculeActivation()
    {
        if (firstActivation)
        {
            atoms    = new GameObject[AtomsManager.GetN()];
            atoms[0] = AtomsManager.GetPivot();

            for (int i = 0; i < AtomsManager.GetAtoms().Count; i++)
            {
                atoms[i + 1] = AtomsManager.GetAtoms()[i].gameObject;
            }

            solutionAtoms    = new GameObject[AtomsManager.GetN()];
            solutionAtoms[0] = SolutionManager.GetPivot();

            for (int i = 0; i < SolutionManager.GetAtoms().Count; i++)
            {
                solutionAtoms[i + 1] = SolutionManager.GetAtoms()[i].gameObject;
            }

            CreateSolutionMST();
            atomsMST = VertexListToAdjencyList(solutionMST);
            Dfs(solutionMST[0]);

            DisplayMoleculeBonds();
            // IMPOSTA PARENTELE MOLECOLE
            ParentingMolecule();
            firstActivation = false;
        }
        else
        {
            Debug.Log("second");
            Dfs(solutionMST[0]);
            DisplayMoleculeBonds();
        }
    }
    // Update is called once per frame
    void Update()
    {
        //Debug.Log("activated: " + activated);

        if (!activated)
        {
            return;
        }
        atomsManager = FindObjectOfType <AtomsManager>();


        if (!atomsChosed)
        {
            //SCEGLI L'ATOMO DA RISOLVERE E LA POSIZIONE TARGET
            //Debug.Log("atomsLength: " + (atomsManager.GetAtoms().Count));
            int range;
            do
            {
                range = Random.Range(0, atomsManager.GetAtoms().Count);
            }while (markedChosenAtoms[range] || CheckSolvedParent(range));

            Debug.Log("i-esimo atomo scelto: " + range);
            chosenAtom = atomsManager.GetAtoms()[range];
            markedChosenAtoms[range] = true;
            float minDistance  = float.MaxValue;
            float minDistance1 = float.MaxValue;
            float minDistance2 = float.MaxValue;
            int   j            = -1;
            for (int i = 0; i < levelManager.SolAtomPos.Length; i++)
            {
                if (markedTargets[i])
                {
                    continue;
                }
                float d1 = Vector3.Distance(levelManager.SolAtomPos[i], chosenAtom.transform.localPosition);
                float d2 = Vector3.Distance(-levelManager.SolAtomPos[i], chosenAtom.transform.localPosition);
                if (d1 < minDistance)
                {
                    minDistance1 = d1;
                }

                if (d2 < minDistance2)
                {
                    minDistance2 = d2;
                }

                float minDistanceTemp = minDistance1 < minDistance2 ? minDistance1 : minDistance2;

                if (!(minDistanceTemp < minDistance))
                {
                    continue;
                }
                minDistance = minDistanceTemp;
                target      = pivotPos + levelManager.SolAtomPos[i];
                j           = i;
                Debug.Log("target changed: " + i);
            }
            markedTargets[j] = true;
            Debug.Log("target: " + target);

            transform.position = (chosenAtom.transform.position + target) / 2;
            transform.LookAt(target);
            atomsChosed = true;
        }

        if (target == Vector3.zero)
        {
            return;
        }
        transform.position = (chosenAtom.transform.position + target) / 2;
        transform.LookAt(target);
        transform.Rotate(90, 0, 0);

        float distance = Vector3.Distance(target, chosenAtom.transform.position);

        transform.localScale = new Vector3(
            transform.localScale.x,
            distance / 2,
            transform.localScale.z
            );



        _rendererTail.enabled = true;
        _rendererHead.enabled = true;

        _rendererTail.material.SetColor(_Color, Color.HSVToRGB(0.4f + -0.04f * Mathf.Clamp(distance, 0, 10), 1, 0.5f));
        _rendererTail.material.SetColor(_EmissionColor, Color.HSVToRGB(0.4f + -0.04f * Mathf.Clamp(distance, 0, 10), 1, 0.5f));

        _rendererHead.material.SetColor(_Color, Color.HSVToRGB(0.4f + -0.04f * Mathf.Clamp(distance, 0, 10), 1, 0.5f));
        _rendererHead.material.SetColor(_EmissionColor, Color.HSVToRGB(0.4f + -0.04f * Mathf.Clamp(distance, 0, 10), 1, 0.5f));

        //Debug.Log(Vector3.Distance(target, chosenAtom.transform.position));
        if (!(distance <= 0.3))
        {
            return;
        }
        StartCoroutine(Snap(chosenAtom));
        chosenAtom.GetComponent <Collider>().enabled = false;
        chosenAtom.GetComponent <Atom>().SetSolved(true);
        chosenAtom.GetComponent <Atom>().ChangeMaterial(3);
        Debug.Log("done");

        _rendererTail.enabled = false;
        _rendererHead.enabled = false;
        activated             = false;
        atomsChosed           = false;
        hintButton.GetComponent <Button>().interactable = true;
        //target = Vector3.zero;
    }
Beispiel #10
0
 public void SetAtomsManager(AtomsManager am)
 {
     atomsManager = am;
 }
Beispiel #11
0
    //private bool activeGizmo;


    // Start is called before the first frame update
    void Start()
    {
        allAtomsPositions    = new Vector3[AtomsManager.GetN()];
        allAtomsPositions[0] = Vector3.zero;
    }
 private void Start()
 {
     atomsManager    = FindObjectOfType <AtomsManager>();
     solutionManager = FindObjectOfType <SolutionManager>();
 }