summaryrefslogtreecommitdiff
path: root/Runtime/Misc/GOCreation.cpp
blob: d6277b8645e20a0e76b7b572dacdbaddc3d22e51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "UnityPrefix.h"
#include "GOCreation.h"
#include "GameObjectUtility.h"
#include "Runtime/Filters/Renderer.h"
#include "Runtime/Dynamics/CapsuleCollider.h"
#include "Runtime/Dynamics/Collider.h"
#include "ResourceManager.h"
#include "Runtime/Filters/Mesh/LodMeshFilter.h"
#include "Runtime/Filters/Mesh/LodMesh.h"
#include "Runtime/Misc/BuildSettings.h"
#include "Runtime/Shaders/Material.h"
#include "Runtime/Interfaces/IPhysics.h"

GameObject* CreatePrimitive (int type)
{
	GameObject* go = NULL;
	if (type == kPrimitiveSphere)
	{
	 	go = &CreateGameObject ("Sphere", "MeshFilter", "SphereCollider", "MeshRenderer", NULL);
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("New-Sphere.fbx"));

		Collider* collider = go->QueryComponent (Collider);
		if (collider)
		{
			if (!IS_CONTENT_NEWER_OR_SAME(kUnityVersion4_0_a1))
				SmartResetObject(*collider);
		}
		
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	else if (type == kPrimitiveCapsule)
	{
	 	go = &CreateGameObject ("Capsule", "MeshFilter", "CapsuleCollider", "MeshRenderer", NULL);
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("New-Capsule.fbx"));

		CapsuleCollider* collider = go->QueryComponent (CapsuleCollider);
		if (collider != NULL)
		{
			if (!IS_CONTENT_NEWER_OR_SAME(kUnityVersion4_0_a1))
				SmartResetObject(*collider);
			else
				GetIPhysics()->CapsuleColliderSetHeight(*collider, 2.0f);
		}
		
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	else if (type == kPrimitiveCylinder)
	{
	 	go = &CreateGameObject ("Cylinder", "MeshFilter", "CapsuleCollider", "MeshRenderer", NULL);
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("New-Cylinder.fbx"));

		CapsuleCollider* collider = go->QueryComponent (CapsuleCollider);
		if (collider != NULL)
		{
			if (!IS_CONTENT_NEWER_OR_SAME(kUnityVersion4_0_a1))
				SmartResetObject(*collider);
			else
				GetIPhysics()->CapsuleColliderSetHeight(*collider, 2.0f);
		}
		
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	else if (type == kPrimitiveCube)
	{
	 	go = &CreateGameObject ("Cube", 
								"MeshFilter",
#if ENABLE_PHYSICS								
								"BoxCollider", 
#endif								
								"MeshRenderer", 
								NULL);
		
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("Cube.fbx"));
#if ENABLE_PHYSICS
		SmartResetObject(go->GetComponent (Collider));
#endif
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	else if (type == kPrimitivePlane)
	{
	 	go = &CreateGameObject ("Plane", "MeshFilter", "MeshCollider", "MeshRenderer", NULL);
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("New-Plane.fbx"));
		SmartResetObject(go->GetComponent (Collider));
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	else if (type == kPrimitiveQuad)
	{
	 	go = &CreateGameObject ("Quad", "MeshFilter", "MeshCollider", "MeshRenderer", NULL);
	 	go->GetComponent (MeshFilter).SetSharedMesh (GetBuiltinResource<Mesh> ("Quad.fbx"));
		SmartResetObject(go->GetComponent (Collider));
	 	go->GetComponent (Renderer).SetMaterial (Material::GetDefaultDiffuseMaterial(), 0);
	}
	
	return go;
}