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; } } }
public Atom CreateEnemy(string type, GamePosition position, GameState gameState) { var tile = type switch { "Mook" => 'm', "Holy Waste" => 'h' }; var enemy = new Atom(type, tile, position); enemy.AddComponent(new AgentComponent(enemy)); var damagedComponent = new DamagedComponent(enemy, _eventBus, _rand); enemy.AddComponent(damagedComponent); // var navComponent = new RandomNavComponent(enemy, _rand, _scheduleController, 2013, gameState); var navComponent = new DirectNavComponent(enemy, _scheduleController, 2013); enemy.AddComponent(navComponent); return(enemy); } }
private void CreateAtomRC(int type, int start, int end, ArrayList atomLocationalist, Color c, Vector3 v, int order) { GameObject Atom; Atom = GameObject.CreatePrimitive(PrimitiveType.Cube); 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.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL"); Atom.AddComponent("BallUpdateRC"); BallUpdateRC comp = Atom.GetComponent <BallUpdateRC>(); 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; } }
public Atom CreatePlayer(string name, GamePosition position) { var player = new Atom("Player", '@', position); var damagerComponent = new DamagerComponent(player, _eventBus); player.AddComponent(damagerComponent); var interactionComponent = new PlayerInteractionComponent(player, _levelController, damagerComponent, _random); player.AddComponent(interactionComponent); var inputActionController = new PlayerInputActionController(player, interactionComponent, _scheduleController); player.AddComponent(inputActionController); var uniqueComponent = new UniqueAtomComponent(player, name); player.AddComponent(uniqueComponent); var inventoryComponent = new InventoryComponent(player, _levelController, _eventBus); player.AddComponent(inventoryComponent); var agentComponent = new AgentComponent(player); player.AddComponent(agentComponent); return(player); }
//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); }
/* * private void CreateAtomArray(int size) { * Debug.Log("AtomArray"); * Debug.Log(size); * hyperballs = new GameObject[size]; * GameObject first = GameObject.CreatePrimitive(PrimitiveType.Cube); * first.transform.parent = AtomCubeParent.transform; * hyperballs[0] = first; * for(int i=1; i<size; i++) * hyperballs[i] = (GameObject) GameObject.Instantiate(first); * } */ //iAtom : Atom index in atomLocationalist private void CreateAtomHB(int iAtom, IList coordinates, IList atomModels) { GameObject Atom; Atom = GameObject.CreatePrimitive(PrimitiveType.Cube); float[] fLocation = coordinates[iAtom] as float[]; Vector3 location = new Vector3(fLocation[0], fLocation[1], fLocation[2]); AtomModel atomModel = atomModels[iAtom] as AtomModel; Atom.transform.Translate(location); Atom.transform.parent = AtomCubeParent.transform; MoleculeModel.atoms.Add(Atom); if (atomtype == UIData.AtomType.hyperball) { //Test platform to choose the good shader 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"); // Atom.renderer.material.shader=Shader.Find("Custom/BallImprovedZ"); break; } Atom.AddComponent("BallUpdateHB"); if (UI.GUIDisplay.file_extension == "xgmml") { Atom.GetComponent <BallUpdateHB>().z = (float)(fLocation[2]); } } else { Atom.AddComponent("BallUpdateCube"); BallUpdateCube comp1 = Atom.GetComponent <BallUpdateCube>(); comp1.SetRayonFactor(atomModel.scale / 100); } BallUpdate comp = Atom.GetComponent <BallUpdate>(); // Debug.Log ("%%%%%%%%%%%%%%%%%%%%% Creating Atom"); // Debug.Log (iAtom); comp.rayon = atomModel.radius; comp.atomcolor = atomModel.baseColor; comp.number = iAtom; // Debug.Log (comp.number); comp.oldrayonFactor = atomModel.scale / 100; // Why division by 100 ??? if (UI.GUIDisplay.file_extension == "xgmml") { comp.rayon = ((MoleculeModel.CSRadiusList[iAtom]) as float[])[0]; comp.atomcolor = HexToColor((MoleculeModel.CSColorList[iAtom] as string[])[0]); } Atom.renderer.material.SetColor("_Color", comp.atomcolor); // Projector proj = Atom.AddComponent<Projector>(); Atom.AddComponent <Projector>(); comp.enabled = true; comp.isSplineNode = UIData.secondarystruct; Atom.tag = atomModel.type; if (atomtype == UIData.AtomType.particleball) { Atom.renderer.enabled = false; } BoxCollider collider = Atom.collider as BoxCollider; float newSize = comp.rayon * 60 / 100; collider.size = new Vector3(newSize, newSize, newSize); }