diff --git a/Assets/script/Atome.meta b/Assets/script/Atome.meta new file mode 100644 index 0000000..4b5e5fe --- /dev/null +++ b/Assets/script/Atome.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d277baeb8e7f7794fb44493815552a02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Atome/AtomeFactory.cs b/Assets/script/Atome/AtomeFactory.cs index b1fef7b..8826b3d 100644 --- a/Assets/script/Atome/AtomeFactory.cs +++ b/Assets/script/Atome/AtomeFactory.cs @@ -47,15 +47,88 @@ public class AtomeFactory : MonoBehaviour{ return atome; } - public GameObject createAnimatedAtome(string atome) { + public GameObject createAnimatedAtome(string symbol) { if(!AtomeDictionary.ContainsKey(symbol)){ Debug.LogError("Atome does not existe in json"); return null; } - AtomeInformation atome = AtomeDictionary[symbol]; - - //return le gameObject + AtomeInformation atomeinfo = AtomeDictionary[symbol]; + GameObject Parent = new GameObject(atomeinfo.name); + int ElectronsNumber = atomeinfo.protons; + + //Symbol + GameObject atome = CreateSymbolAnimation(atomeinfo); + atome.transform.parent = Parent.transform; + //Electrons + for (int i = 1; ElectronsNumber > 0; i++) { + int nbrElectronLayer = 2 * (i * i); + GameObject electrons = CreateElectronsAnimation(Mathf.Min(ElectronsNumber, nbrElectronLayer), (float)i); + electrons.transform.parent = Parent.transform; + ElectronsNumber -= nbrElectronLayer; + } + //rajouter electron == protons + return Parent; } + private GameObject DrawCircle(float orbitRadius) + { + GameObject orbitCircle = new GameObject("Orbit Circle"); + LineRenderer lineRenderer = orbitCircle.AddComponent(); + lineRenderer.useWorldSpace = false; + lineRenderer.widthMultiplier = 0.05f; // Ajustez l'épaisseur de la ligne si nécessaire. + lineRenderer.positionCount = 100 + 1; + //Add Color + Color myColor = new Color(0, 0, 1, 1); + ColorUtility.TryParseHtmlString("#7F7F7F", out myColor); + orbitCircle.GetComponent().material.color = myColor; + + for (int i = 0; i <= 100; i++) + { + float angle = i * 2 * Mathf.PI / 100; + float x = Mathf.Cos(angle) * orbitRadius; + float y = Mathf.Sin(angle) * orbitRadius; + + lineRenderer.SetPosition(i, new Vector3(x, 0f, y)); + } + return orbitCircle; + } + + + private GameObject CreateSymbolAnimation(AtomeInformation info) { + //Create GameObject + GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); + //Add information + sphere.name = info.symbol; + sphere.transform.position = new Vector3(0, 0, 0); + //Add Color + Color myColor = new Color(0, 0, 1, 1); + ColorUtility.TryParseHtmlString(info.representation.color, out myColor); + sphere.GetComponent().material.color = myColor; + + return sphere; + } + + + + private GameObject CreateElectronsAnimation(int electrons, float layer) { + GameObject ParentLayer = new GameObject("Electrons"); + + for (int i = 0; i < electrons; i++) { + float angle = i * Mathf.PI * 2 / electrons; + float x = Mathf.Cos(angle) * layer; + float z = Mathf.Sin(angle) * layer; + float y = 0f; + + GameObject electron = GameObject.CreatePrimitive(PrimitiveType.Sphere); + electron.name = "Electron" + i; + electron.transform.position = new Vector3(x, y, z); + electron.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f); + electron.transform.parent = ParentLayer.transform; + } + GameObject orbit = DrawCircle(layer); + orbit.transform.parent = ParentLayer.transform; + + return ParentLayer; + } } \ No newline at end of file diff --git a/Assets/script/Molecule.meta b/Assets/script/Molecule.meta new file mode 100644 index 0000000..8aac8ac --- /dev/null +++ b/Assets/script/Molecule.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: daab5552b7014024c9b81a31c7eb0b12 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/New Animation.anim b/Assets/script/New Animation.anim new file mode 100644 index 0000000..aa588a9 --- /dev/null +++ b/Assets/script/New Animation.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Animation + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/script/New Animation.anim.meta b/Assets/script/New Animation.anim.meta new file mode 100644 index 0000000..77cf58b --- /dev/null +++ b/Assets/script/New Animation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f4a98ccdd3a2514495ffff7ef525aa7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/New Animator Controller.controller b/Assets/script/New Animator Controller.controller new file mode 100644 index 0000000..0e56030 --- /dev/null +++ b/Assets/script/New Animator Controller.controller @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Animator Controller + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: [] diff --git a/Assets/script/New Animator Controller.controller.meta b/Assets/script/New Animator Controller.controller.meta new file mode 100644 index 0000000..24017de --- /dev/null +++ b/Assets/script/New Animator Controller.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 825a7187bec92284dbce290965de4dba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/script/Testor.cs b/Assets/script/Testor.cs new file mode 100644 index 0000000..a2f2f9a --- /dev/null +++ b/Assets/script/Testor.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +class MoleculeFactoryTester: MonoBehaviour { + + public TextAsset moleculeJson; + public TextAsset atomJson; + + void Start(){ + MoleculeFactory factory = MoleculeFactory.getInstrance(this.moleculeJson); + AtomeFactory atomeFactory = AtomeFactory.getInstrance(this.atomJson); + GameObject mol = atomeFactory.createAnimatedAtome("Na"); + //mol.transform.position = new Vector3(0,1,0); + //GameObject bon = GameOject.CreatePrimitive(PrimitiveType.) + } + +} \ No newline at end of file diff --git a/Assets/script/Testor.cs.meta b/Assets/script/Testor.cs.meta new file mode 100644 index 0000000..dc498a2 --- /dev/null +++ b/Assets/script/Testor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d15c31ec91cb674fac22415c1ceff75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: