Example #1
0
    public void Reset(Vector3 pos, Quaternion rot, Molecules parent, Atom[] theAtoms)
    {
        parentScript        = parent;
        trans               = transform;
        trans.localPosition = pos;
        refPos              = trans.position;
        trans.rotation      = rot;
        atoms               = theAtoms;

        MoleculeDisplay.Atom[] displayAtoms = new MoleculeDisplay.Atom[atoms.Length];
        Vector3 avg          = averagePos;
        float   spacingScale = 0.028f;
        float   atomScale    = 0.5f;
        Vector3 avg2         = Vector3.zero;
        int     len          = 0;
        Bounds  box          = new Bounds();

        for (int i = 0; i < atoms.Length; i++)
        {
            if (atoms[i] != null)
            {
                Vector3 p = atoms[i].pos * spacingScale * parent.atomSpacingFudge;
                if (i == 0)
                {
                    box.center = p;
                    box.size   = Vector3.one * 0.5f * spacingScale * parent.atomSpacingFudge;
                }
                else
                {
                    box.Encapsulate(p);
                }
                avg2 += p;
                len++;
            }
        }

        if (len != 0)
        {
            avg2 /= len;
        }
        box.center -= avg2;
        box.size   += Vector3.one * 2 * spacingScale * parent.atomSpacingFudge;
        for (int i = 0; i < atoms.Length; i++)
        {
            if (atoms[i] != null)
            {
                MoleculeDisplay.Atom a = new MoleculeDisplay.Atom();
                a.position      = (atoms[i].pos * spacingScale * parent.atomSpacingFudge) - avg2;
                a.size          = atomSizes[(int)atoms[i].e] * atomScale * parent.atomSizeFudge;
                displayAtoms[i] = a;
            }
        }
        display.SetAtoms(displayAtoms);
        boundingBox    = box;
        atomCount      = len;
        collided       = 0;
        trans.position = trans.TransformPoint((avg2 - avg) * parentScript.sizeScale);
        refPos         = worldPosition = trans.position;
    }
Example #2
0
    public void Reset(Vector3 pos, Quaternion rot, Molecules parent, int moleculeType)
    {
        myTypeIndex         = moleculeType;
        trans               = transform;
        parentScript        = parent;
        trans.localPosition = pos;
        refPos              = worldPosition = trans.position;
        trans.rotation      = rot;
        //Debug.Log(moleculeType + "        " + parent.typeInstances.Length);
        atoms = parent.typeInstances[moleculeType].atoms;

        // THIS MUST MATCH Cut() !!!!!!!!!
        MoleculeDisplay.Atom[] displayAtoms = new MoleculeDisplay.Atom[atoms.Length];
        Vector3 avg          = Vector3.zero;
        float   spacingScale = 0.028f;
        float   atomScale    = 0.5f;
        int     len          = 0;
        Bounds  box          = new Bounds();

        for (int i = 0; i < atoms.Length; i++)
        {
            if (atoms[i] != null)
            {
                Vector3 p = atoms[i].pos * spacingScale * parent.atomSpacingFudge;
                if (i == 0)
                {
                    box.center = p;
                    box.size   = Vector3.one * 0.5f * spacingScale * parent.atomSpacingFudge;
                }
                else
                {
                    box.Encapsulate(p);
                }
                avg += p;
                len++;
            }
        }

        avg        /= len;
        box.center -= avg;
        box.size   += Vector3.one * 2 * spacingScale * parent.atomSpacingFudge;
        for (int i = 0; i < atoms.Length; i++)
        {
            if (atoms[i] != null)
            {
                MoleculeDisplay.Atom a = new MoleculeDisplay.Atom();
                a.position      = (atoms[i].pos * spacingScale * parent.atomSpacingFudge) - avg;
                a.size          = atomSizes[(int)atoms[i].e] * atomScale * parent.atomSizeFudge;
                displayAtoms[i] = a;
            }
        }
        averagePos = avg;
        display.SetAtoms(displayAtoms);
        boundingBox = box;
        atomCount   = len;
        collided    = 0;
    }