public virtual int DeInitializeComponent(int entityID, ECSComponent component) { if (component.GetType() == typeof(CTransform)) { CTransform cTransform = component as CTransform; GameObject.Destroy(cTransform.GameObject); } if (component.GetType() == typeof(CSpriteRenderer)) { CSpriteRenderer cRenderer = component as CSpriteRenderer; DestroyUnityComponent <SpriteRenderer>(entityID, cRenderer); } if (component.GetType() == typeof(CBoxCollider)) { CBoxCollider cBoxCollider = component as CBoxCollider; OnColliderRemoved(entityID, cBoxCollider.BoxCollider); DestroyUnityComponent <BoxCollider>(entityID, cBoxCollider); } if (component.GetType() == typeof(CMeshCollider)) { CMeshCollider cMeshCollider = component as CMeshCollider; OnColliderRemoved(entityID, cMeshCollider.Collider); DestroyUnityComponent <MeshCollider>(entityID, cMeshCollider); } if (component.GetType() == typeof(CSphereCollider)) { CSphereCollider cSphereCollider = component as CSphereCollider; OnColliderRemoved(entityID, cSphereCollider.Collider); DestroyUnityComponent <SphereCollider>(entityID, cSphereCollider); } if (component.GetType() == typeof(CRigidbody)) { CRigidbody cRigidbody = component as CRigidbody; DestroyUnityComponent <Rigidbody>(entityID, cRigidbody); } if (component.GetType() == typeof(CMeshRenderer)) { CMeshRenderer cMeshRenderer = component as CMeshRenderer; DestroyUnityComponent <MeshRenderer>(entityID, cMeshRenderer); DestroyUnityComponent <MeshFilter>(entityID, cMeshRenderer); } return(0); }
public virtual int InitializeComponent(int entityID, ECSComponent component) { if (component.GetType() == typeof(CTransform)) { CTransform cTransform = component as CTransform; if (cTransform.GameObject == null) { if (cTransform.PrefabID == null) { cTransform.GameObject = new GameObject(cTransform.Name); } else { GameObject prefab = Resources.Load <GameObject>(cTransform.PrefabID); if (prefab == null) { OnComponentInitializeFailure(cTransform, "Prefab could not be found " + cTransform.PrefabID); return(1); } cTransform.GameObject = GameObject.Instantiate(prefab); } } if (cTransform.LayerID != -1) { cTransform.GameObject.layer = cTransform.LayerID; } if (cTransform.X.Equals(float.NaN)) { cTransform.X = cTransform.GameObject.transform.position.x; } if (cTransform.Y.Equals(float.NaN)) { cTransform.Y = cTransform.GameObject.transform.position.y; } if (cTransform.Z.Equals(float.NaN)) { cTransform.Z = cTransform.GameObject.transform.position.z; } if (cTransform.RotationX.Equals(float.NaN)) { cTransform.RotationX = cTransform.GameObject.transform.eulerAngles.x; } if (cTransform.RotationY.Equals(float.NaN)) { cTransform.RotationY = cTransform.GameObject.transform.eulerAngles.y; } if (cTransform.RotationZ.Equals(float.NaN)) { cTransform.RotationZ = cTransform.GameObject.transform.eulerAngles.z; } if (cTransform.ScaleX.Equals(float.NaN)) { cTransform.ScaleX = cTransform.GameObject.transform.localScale.x; } if (cTransform.ScaleY.Equals(float.NaN)) { cTransform.ScaleY = cTransform.GameObject.transform.localScale.y; } if (cTransform.ScaleZ.Equals(float.NaN)) { cTransform.ScaleZ = cTransform.GameObject.transform.localScale.z; } } if (component.GetType() == typeof(CSpriteRenderer)) { CSpriteRenderer cRenderer = component as CSpriteRenderer; CTransform cTransform = VerifyTransform(cRenderer, entityID); if (cTransform == null) { return(1); } cRenderer.SpriteRenderer = AddOrGetUnityComponent <SpriteRenderer>(cTransform); } if (component.GetType() == typeof(CRigidbody)) { CRigidbody cRigidbody = component as CRigidbody; CTransform cTransform = VerifyTransform(cRigidbody, entityID); if (cTransform == null) { return(1); } bool overwriteValues = (cTransform.GameObject.GetComponent <Rigidbody>() != null); cRigidbody.RigidBody = AddOrGetUnityComponent <Rigidbody>(cTransform); if (overwriteValues) { cRigidbody.IsKinematic = cRigidbody.RigidBody.isKinematic; cRigidbody.UseGravity = cRigidbody.RigidBody.useGravity; } } if (component.GetType() == typeof(CBoxCollider)) { CBoxCollider cBoxCollider = component as CBoxCollider; CTransform cTransform = VerifyTransform(cBoxCollider, entityID); if (cTransform == null) { return(1); } if (cBoxCollider.BoxCollider == null) { cBoxCollider.BoxCollider = AddOrGetUnityComponent <BoxCollider>(cTransform); } OnColliderAdded(cBoxCollider.BoxCollider, entityID); } if (component.GetType() == typeof(CMeshCollider)) { CMeshCollider collider = component as CMeshCollider; CTransform cTransform = VerifyTransform(collider, entityID); CMeshRenderer cMeshRenderer = GetComponent <CMeshRenderer>(collider, entityID); if (cMeshRenderer == null) { return(1); } if (cMeshRenderer.MeshFilter == null) { OnComponentInitializeFailure(collider, "Cannot create mesh collider without mesh filter"); return(1); } if (collider.Collider == null) { collider.Collider = AddOrGetUnityComponent <MeshCollider>(cTransform); collider.Collider.sharedMesh = null; collider.Collider.sharedMesh = cMeshRenderer.MeshFilter.mesh; if (collider.IsConvex) { collider.Collider.convex = true; } } OnColliderAdded(collider.Collider, entityID); } if (component.GetType() == typeof(CSphereCollider)) { CSphereCollider cSphereCollider = component as CSphereCollider; CTransform cTransform = VerifyTransform(cSphereCollider, entityID); if (cTransform == null) { return(1); } if (cSphereCollider.Collider == null) { cSphereCollider.Collider = AddOrGetUnityComponent <SphereCollider>(cTransform); if (cSphereCollider.PhysicsMaterialID != null && (cSphereCollider.Collider.material == null || cSphereCollider.Collider.material.name != cSphereCollider.PhysicsMaterialID)) { cSphereCollider.Collider.material = Resources.Load <PhysicMaterial>(cSphereCollider.PhysicsMaterialID); } } OnColliderAdded(cSphereCollider.Collider, entityID); } if (component.GetType() == typeof(CMeshRenderer)) { CMeshRenderer meshRenderer = component as CMeshRenderer; CTransform cTransform = VerifyTransform(meshRenderer, entityID); if (cTransform == null) { return(1); } if (meshRenderer.MeshRenderer == null) { meshRenderer.MeshRenderer = AddOrGetUnityComponent <MeshRenderer>(cTransform); if (meshRenderer.MaterialID != null && (meshRenderer.MeshRenderer.material == null || meshRenderer.MeshRenderer.material.name != meshRenderer.MaterialID)) { meshRenderer.MeshRenderer.material = Resources.Load <Material>(meshRenderer.MaterialID); } } if (meshRenderer.MeshFilter == null) { meshRenderer.MeshFilter = AddOrGetUnityComponent <MeshFilter>(cTransform); if (meshRenderer.MeshID != null && (meshRenderer.MeshFilter.mesh.name != meshRenderer.MeshID || meshRenderer.MeshFilter.mesh == null)) { Mesh mesh = Resources.Load <Mesh>(meshRenderer.MeshID); meshRenderer.MeshFilter.mesh = mesh; } meshRenderer.MeshID = meshRenderer.MeshFilter.mesh.name; } } return(0); }