private void CreateCombineMeshHyperBall(int type, int start, int end, ArrayList atomLocationalist, Color c, Vector3 v, int order) { GameObject SpriteManager; if (!GameObject.Find("SpriteManager")) { SpriteManager = GameObject.CreatePrimitive(PrimitiveType.Cube); SpriteManager.name = "SpriteManager"; } else { SpriteManager = GameObject.Find("SpriteManager"); } GameObject Atom; if (UIData.toggleClip) { Atom = Clip4RayCasting.CreateClip(); } else { Atom = GameObject.CreatePrimitive(PrimitiveType.Plane); } Atom.transform.parent = SpriteManager.transform; float[] fLocation = atomLocationalist[start] as float[]; Vector3 location = new Vector3(fLocation[0], fLocation[1], fLocation[2]); Atom.transform.Translate(location); Atom.renderer.material.SetColor("_Color", c); MoleculeModel.atoms.Add(Atom); Atom.AddComponent("CameraFacingBillboard"); Atom.GetComponent <CameraFacingBillboard>().cameraToLookAt = GameObject.Find("Camera").camera; Atom.transform.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL"); Atom.AddComponent("BallUpdateHB"); BallUpdateHB comp = Atom.GetComponent <BallUpdateHB>(); comp.rayon = (float)(v[0]); comp.atomcolor = c; comp.number = order; comp.enabled = true; switch (type) { case 0: Atom.tag = "C"; break; case 1: Atom.tag = "N"; break; case 2: Atom.tag = "O"; break; case 3: Atom.tag = "S"; break; case 4: Atom.tag = "P"; break; case 5: Atom.tag = "H"; break; default: Atom.tag = "X"; break; } }
// Update is called once per frame void LateUpdate() { if (Input.GetMouseButton(1)) { Ray sRay = camera.ScreenPointToRay(Input.mousePosition); RaycastHit sHit; if (!Physics.Raycast(sRay, out sHit)) { // MonoBehaviour.print(Input.mousePosition); Vector3 pos = Input.mousePosition; pos.z = 1; pos = Camera.main.ScreenToWorldPoint(pos); pos.z = -8; // pos.x *= Camera.main.pixelWidth; // pos.y *= Camera.main.pixelHeight; // MonoBehaviour.print(pos); GameObject Atom; Atom = GameObject.CreatePrimitive(PrimitiveType.Cube); Atom.transform.position = pos; Material newMat = new Material(Shader.Find("FvNano/Single Cube Sphere Raycasting new")); newMat.SetColor("_Color", new Vector4(1.0f, 0.0f, 0.0f, 1.0f)); Atom.renderer.material = newMat; Atom.AddComponent("BallUpdateHB"); BallUpdateHB comp = Atom.GetComponent <BallUpdateHB>(); comp.rayon = 1.0f; Atom.AddComponent <Rigidbody>(); Atom.rigidbody.useGravity = false; Atom.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; Atom.rigidbody.drag = 0.6f; Atom.AddComponent <SpringJoint>(); Atom.AddComponent <MouseOverMolecule>(); if (last != null) { GameObject bond = GameObject.CreatePrimitive(PrimitiveType.Cube); Material bondMat = new Material(Shader.Find("FvNano/Hyperbole Stick new")); bondMat.SetFloat("_Shrink", 0.03f); bond.renderer.material = bondMat; bond.AddComponent("StickUpdate"); StickUpdate bondComp = bond.GetComponent <StickUpdate>(); bondComp.atompointer1 = last; bondComp.atompointer2 = Atom; //last.GetComponent<SpringJoint>().connectedBody = Atom.GetComponent<Rigidbody>(); } last = Atom; } } }
private void CreateAtomRCSprite(int type, int start, int end, ArrayList atomLocationalist, Color c, Vector3 v, int order) { LinkedSpriteManager linkedSpriteManager = null; GameObject SpriteManager; if (!GameObject.Find("SpriteManager")) { SpriteManager = new GameObject(); SpriteManager.name = "SpriteManager"; } else { SpriteManager = GameObject.Find("SpriteManager"); } SpriteManager.GetComponent <MeshRenderer>().enabled = true; if (SpriteManager.GetComponent <LinkedSpriteManager>() == null) { SpriteManager.AddComponent("LinkedSpriteManager"); linkedSpriteManager = (LinkedSpriteManager)Component.FindObjectOfType(typeof(LinkedSpriteManager)); Material mat = Resources.Load("Materials/hyperballshader", typeof(Material)) as Material; linkedSpriteManager.material = mat; linkedSpriteManager.allocBlockSize = atomLocationalist.Count; } else { linkedSpriteManager = (LinkedSpriteManager)Component.FindObjectOfType(typeof(LinkedSpriteManager)); linkedSpriteManager.allocBlockSize = atomLocationalist.Count; linkedSpriteManager.enabled = true; } GameObject Atom; float[] fLocation = atomLocationalist[start] as float[]; Vector3 location = new Vector3(fLocation[0], fLocation[1], fLocation[2]); UnityEngine.Object o; o = MonoBehaviour.Instantiate(Resources.Load("HBspriteplane"), location, new Quaternion(0f, 0f, 0f, 0f)); Atom = (GameObject)o; MoleculeModel.atoms.Add(Atom); Atom.renderer.material.SetColor("_Color", c); BallUpdateHB comp = Atom.GetComponent <BallUpdateHB>(); comp.rayon = (float)(v[0]); comp.atomcolor = c; comp.number = order; comp.enabled = true; linkedSpriteManager.AddSprite(Atom, 1f, 1f, 0, 0, 256, 256, true); switch (type) { case 0: Atom.tag = "C"; break; case 1: Atom.tag = "N"; break; case 2: Atom.tag = "O"; break; case 3: Atom.tag = "S"; break; case 4: Atom.tag = "P"; break; case 5: Atom.tag = "H"; break; default: Atom.tag = "X"; break; } }
//iType : Atom type index (element) //iAtom : Atom index in atomLocationalist private void CreateAtomHB(int iType, int iAtom, ArrayList atomLocationalist, Color c, Vector3 v, int order) { GameObject Atom; Atom = GameObject.CreatePrimitive(PrimitiveType.Cube); /* * UnityEngine.Object.Destroy(Atom.collider); * Object.DestroyImmediate(Atom.collider); * GameObject.DestroyImmediate(Atom.collider); // "good" one * Atom.AddComponent<Rigidbody>(); * Atom.rigidbody.isKinematic = true; * Debug.Log("Atom collider?"); * Debug.Log(Atom.collider.ToString()); * GameObject.DestroyObject(Atom.collider); */ float[] fLocation = atomLocationalist[iAtom] as float[]; Vector3 location = new Vector3(fLocation[0], fLocation[1], fLocation[2]); Atom.transform.Translate(location); Atom.renderer.material.SetColor("_Color", c); // Atom.transform.parent = AtomCubeParent.transform; // Debug.Log(Atom.collider.ToString()); MoleculeModel.atoms.Add(Atom); BallUpdate script; if (atomtype == UIData.AtomType.hyperball) { RuntimePlatform platform = Application.platform; switch (platform) { case RuntimePlatform.WindowsPlayer: case RuntimePlatform.WindowsWebPlayer: case RuntimePlatform.WindowsEditor: Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL"); break; default: Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL"); break; } Atom.AddComponent("BallUpdateHB"); BallUpdateHB comp = Atom.GetComponent <BallUpdateHB>(); script = comp; comp.rayon = (float)(v[0]); comp.atomcolor = c; comp.number = order; comp.z = (float)(fLocation[2]); // Projector proj = Atom.AddComponent<Projector>(); Atom.AddComponent <Projector>(); // if(UI.GUIDisplay.file_extension=="xgmml")comp.xgmml=true; comp.enabled = true; switch (iType) { case 0: comp.oldrayonFactor = (MoleculeModel.carbonScale) / 100; break; case 1: comp.oldrayonFactor = (MoleculeModel.nitrogenScale) / 100; break; case 2: comp.oldrayonFactor = (MoleculeModel.oxygenScale) / 100; break; case 3: comp.oldrayonFactor = (MoleculeModel.sulphurScale) / 100; break; case 4: comp.oldrayonFactor = (MoleculeModel.phosphorusScale) / 100; break; case 5: comp.oldrayonFactor = (MoleculeModel.hydrogenScale) / 100; break; default: comp.oldrayonFactor = 2.0f; break; } } else { Atom.AddComponent("BallUpdateCube"); BallUpdateCube comp1 = Atom.GetComponent <BallUpdateCube>(); script = comp1; // comp1.rayon = Atom.transform.localScale.x*2; comp1.rayon = (float)(v[0]) * 2; float rayonfactor; switch (iType) { case 0: rayonfactor = (MoleculeModel.carbonScale) / 100; break; case 1: rayonfactor = (MoleculeModel.nitrogenScale) / 100; break; case 2: rayonfactor = (MoleculeModel.oxygenScale) / 100; break; case 3: rayonfactor = (MoleculeModel.sulphurScale) / 100; break; case 4: rayonfactor = (MoleculeModel.phosphorusScale) / 100; break; case 5: rayonfactor = (MoleculeModel.hydrogenScale) / 100; break; default: rayonfactor = 1.0f; break; } comp1.SetRayonFactor(rayonfactor); comp1.number = order; comp1.enabled = true; } switch (iType) { case 0: Atom.tag = "C"; break; case 1: Atom.tag = "N"; break; case 2: Atom.tag = "O"; break; case 3: Atom.tag = "S"; break; case 4: Atom.tag = "P"; break; case 5: Atom.tag = "H"; break; default: Atom.tag = "X"; break; } if (atomtype == UIData.AtomType.particleball) { Atom.renderer.enabled = false; } BoxCollider collider = Atom.collider as BoxCollider; float newSize = script.rayon * 60 / 100; collider.size = new Vector3(newSize, newSize, newSize); }