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;
            }
        }
    }
Exemple #3
0
        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;
            }
        }
Exemple #5
0
        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);
        }