diff --git a/Assets/script.meta b/Assets/script.meta new file mode 100644 index 0000000..cb2a8f6 --- /dev/null +++ b/Assets/script.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f609c39b51d9e447a6a4a5964011b44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Atom.cs b/Assets/script/Atom.cs new file mode 100644 index 0000000..bb74bbd --- /dev/null +++ b/Assets/script/Atom.cs @@ -0,0 +1,9 @@ +[System.Serializable] +public class Atom +{ + // nom de l'atom + public string element; + + // coordonée XYZ + public float[] geometry; +} \ No newline at end of file diff --git a/Assets/script/Atom.cs.meta b/Assets/script/Atom.cs.meta new file mode 100644 index 0000000..7d83319 --- /dev/null +++ b/Assets/script/Atom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d3069c87e06b0c4c9a88c0695461936 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Bond.cs b/Assets/script/Bond.cs new file mode 100644 index 0000000..2b624b5 --- /dev/null +++ b/Assets/script/Bond.cs @@ -0,0 +1,9 @@ +[System.Serializable] +public class Bond +{ + // numéro des atome lier + public int[] atoms; + + // nombre de liaison + public int order; +} \ No newline at end of file diff --git a/Assets/script/Bond.cs.meta b/Assets/script/Bond.cs.meta new file mode 100644 index 0000000..2f870d7 --- /dev/null +++ b/Assets/script/Bond.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ee91233baa5bef4288717efd423d4df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Molecul.json b/Assets/script/Molecul.json new file mode 100644 index 0000000..f08188d --- /dev/null +++ b/Assets/script/Molecul.json @@ -0,0 +1,98 @@ +{ + "molecules":[ + { + "name": "Dioxygène", + "formula": "O2", + "atoms": [ + { + "element": "O", + "geometry": [0.0, 0.0, 0.0] + }, + { + "element": "O", + "geometry": [1.2, 0.0, 0.0] + } + ], + "bonds": [ + {"atoms": [0, 1], "order": 2} + ], + "properties": { + "molecularMass": 32.0, + "meltingPoint": -218.8, + "boilingPoint": -183.0 + } + }, + { + "name": "Ozone", + "formula": "O3", + "atoms": [ + {"element": "O", "geometry": [0.0, 0.0, 0.0]}, + {"element": "O", "geometry": [0.7, 0.0, 0.0]}, + {"element": "O", "geometry": [1.4, 0.0, 0.0]} + ], + "bonds": [ + {"atoms": [0, 1], "order": 1}, + {"atoms": [1, 2], "order": 1} + ], + "properties": { + "molecularMass": 47.9982, + "meltingPoint": -192.5, + "boilingPoint": -110.0 + } + }, + { + "name": "Dioxyde de carbone", + "formula": "CO2", + "atoms": [ + {"element": "C", "geometry": [0.0, 0.0, 0.0]}, + {"element": "O", "geometry": [1.2, 0.0, 0.0]}, + {"element": "O", "geometry": [-1.2, 0.0, 0.0]} + ], + "bonds": [ + {"atoms": [0, 1], "order": 2}, + {"atoms": [0, 2], "order": 2} + ], + "properties": { + "molecularMass": 44.0095, + "meltingPoint": -56.6, + "boilingPoint": -78.5 + } + }, + { + "name": "Butane", + "formula": "C4H10", + "atoms": [ + {"element": "C", "geometry": [0.0, 0.0, 0.0]}, + {"element": "C", "geometry": [1.5, 0.0, 0.0]}, + {"element": "C", "geometry": [3.0, 0.0, 0.0]}, + {"element": "C", "geometry": [4.5, 0.0, 0.0]}, + {"element": "H", "geometry": [0.0, 1.5, 0.0]}, + {"element": "H", "geometry": [0.0, -1.5, 0.0]}, + {"element": "H", "geometry": [1.5, 1.5, 0.0]}, + {"element": "H", "geometry": [1.5, -1.5, 0.0]}, + {"element": "H", "geometry": [3.0, 1.5, 0.0]}, + {"element": "H", "geometry": [3.0, -1.5, 0.0]}, + {"element": "H", "geometry": [4.5, 1.5, 0.0]}, + {"element": "H", "geometry": [4.5, -1.5, 0.0]} + ], + "bonds": [ + {"atoms": [0, 1], "order": 1}, + {"atoms": [1, 2], "order": 1}, + {"atoms": [2, 3], "order": 1}, + {"atoms": [0, 4], "order": 1}, + {"atoms": [0, 5], "order": 1}, + {"atoms": [1, 6], "order": 1}, + {"atoms": [1, 7], "order": 1}, + {"atoms": [2, 8], "order": 1}, + {"atoms": [2, 9], "order": 1}, + {"atoms": [3, 10], "order": 1}, + {"atoms": [3, 11], "order": 1} + ], + "properties": { + "molecularMass": 58.1222, + "meltingPoint": -138.3, + "boilingPoint": -0.5 + } + } + ] +} diff --git a/Assets/script/Molecul.json.meta b/Assets/script/Molecul.json.meta new file mode 100644 index 0000000..b640aa5 --- /dev/null +++ b/Assets/script/Molecul.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3a11d0f923ae50c4d82ee1dda0f629a3 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/MoleculeFactory.cs b/Assets/script/MoleculeFactory.cs new file mode 100644 index 0000000..3607df5 --- /dev/null +++ b/Assets/script/MoleculeFactory.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + + + +public class MoleculeFactory : MonoBehaviour{ + + public TextAsset jsonFile; + + private static MoleculeFactory instance; + + private Molecules moleculesInJson; + + private Dictionary moleculesDictionary; + + public MoleculeFactory(TextAsset jsonFile){ + MoleculeFactory.instance = this; + moleculesDictionary = new Dictionary(); + moleculesInJson = JsonUtility.FromJson(jsonFile.text); + foreach (var molecule in moleculesInJson.molecules){ + moleculesDictionary.Add(molecule.formula, molecule); + } + } + + public static MoleculeFactory getInstrance(){ + if(MoleculeFactory.instance == null){ + Debug.LogError("no Json file"); + } + return MoleculeFactory.instance; + } + + public static MoleculeFactory getInstrance(TextAsset jsonFile){ + if(MoleculeFactory.instance == null){ + MoleculeFactory.instance = new MoleculeFactory(jsonFile); + } + return MoleculeFactory.instance; + } + + public GameObject createMolecule (string formula){ + if(!moleculesDictionary.ContainsKey(formula)){ + Debug.LogError("molecules does not existe in json"); + } + Molecule molecule = moleculesDictionary[formula]; + GameObject sortie = new GameObject(molecule.name); + + foreach (Atom atom in molecule.atoms) { + GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); + sphere.transform.parent = sortie.transform; + sphere.name = atom.element; + sphere.transform.localPosition = new Vector3(atom.geometry[0], atom.geometry[1], atom.geometry[2]); + //TODO: géré les laision + //TODO: géré la taille de l'atome + //TODO: géré la couleur de l'atome + } + return sortie; + } + +} \ No newline at end of file diff --git a/Assets/script/MoleculeFactory.cs.meta b/Assets/script/MoleculeFactory.cs.meta new file mode 100644 index 0000000..9d48356 --- /dev/null +++ b/Assets/script/MoleculeFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68834abede8b8d14d93f46876f40df3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Molecules.cs b/Assets/script/Molecules.cs new file mode 100644 index 0000000..c4eec61 --- /dev/null +++ b/Assets/script/Molecules.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System; +[System.Serializable] +public class Molecule +{ + // nom molécules + public string name; + + // formule melécule + public string formula; + + // liste des atoms + public Atom[] atoms; + + // liste des liason entre les atoms + public Bond[] bonds; + + // prorpiété de la molécule + public Properties properties; +} + +[System.Serializable] +public class Molecules +{ + // liste des liason entre les atoms + public Molecule[] molecules; +} \ No newline at end of file diff --git a/Assets/script/Molecules.cs.meta b/Assets/script/Molecules.cs.meta new file mode 100644 index 0000000..55e339c --- /dev/null +++ b/Assets/script/Molecules.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23d78ff2f0da0df4ba3f76aa522bfe4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Properties.cs b/Assets/script/Properties.cs new file mode 100644 index 0000000..b8b0d18 --- /dev/null +++ b/Assets/script/Properties.cs @@ -0,0 +1,10 @@ +[System.Serializable] +public class Properties +{ + // masse en g/mol + public float molecularMass; + // température de fusion (solid->liquide) + public float meltingPoint; + // température d'évaporation (liquide-> gaz) + public float boilingPoint; +} \ No newline at end of file diff --git a/Assets/script/Properties.cs.meta b/Assets/script/Properties.cs.meta new file mode 100644 index 0000000..f47d50b --- /dev/null +++ b/Assets/script/Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5df75892dfdcac7468e63229a5bd0ab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/ReadMolecule.cs b/Assets/script/ReadMolecule.cs new file mode 100644 index 0000000..728fb39 --- /dev/null +++ b/Assets/script/ReadMolecule.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ReadMolecule : MonoBehaviour +{ + public TextAsset jsonFile; + + void Start(){ + Molecules moleculesInJson = JsonUtility.FromJson(jsonFile.text); + + int molNum = 0; + int dist = 5; + foreach (Molecule molecule in moleculesInJson.molecules){ + + GameObject moleculeObj = new GameObject(molecule.name); + + foreach (Atom atom in molecule.atoms){ + GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); + sphere.transform.parent = moleculeObj.transform; + sphere.name = atom.element; + sphere.transform.localPosition = new Vector3(atom.geometry[0], atom.geometry[1], atom.geometry[2]); + } + moleculeObj.transform.position = new Vector3(molNum*dist,0,0); + molNum++; + } + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/script/ReadMolecule.cs.meta b/Assets/script/ReadMolecule.cs.meta new file mode 100644 index 0000000..561ff69 --- /dev/null +++ b/Assets/script/ReadMolecule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f13310aa5828a5d47b5e83a3e9eb3fec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: