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; }
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; }