0
|
1 using UnityEngine;
|
|
2 using System.Collections;
|
|
3 using System.Collections.Generic;
|
8
|
4 using JungleDB;
|
|
5 using System;
|
0
|
6
|
|
7 public class StageManager : MonoBehaviour {
|
|
8
|
8
|
9 private float _maxHeight = 10;
|
|
10
|
11
|
11 // パーリンノイズを使ったマップか
|
8
|
12 [SerializeField]
|
|
13 private bool _isPerlinNoiseMap = true;
|
|
14
|
11
|
15 // 起伏の激しさ
|
8
|
16 [SerializeField]
|
|
17 private float _relief = 15f;
|
|
18
|
11
|
19 // Y座標を滑らかにするか(小数点以下をそのままにする)
|
8
|
20 [SerializeField]
|
|
21 private bool _isSmoothness = false;
|
|
22
|
11
|
23 // マップの大きさ
|
8
|
24 [SerializeField]
|
|
25 private float _mapSize = 1f;
|
|
26
|
3
|
27 public static StageManager Instance;
|
0
|
28 private GameObject baseStage;
|
|
29
|
8
|
30 public delegate void StageCreateEndCallback ();
|
|
31 public StageCreateEndCallback callback;
|
|
32
|
|
33 private Jungle jungle;
|
|
34 private int TotalIndex = 0;
|
|
35
|
3
|
36 void Awake () {
|
|
37 if (Instance == null) {
|
|
38 Instance = this;
|
|
39 }
|
|
40 }
|
|
41
|
0
|
42 // Use this for initialization
|
|
43 void Start () {
|
|
44 }
|
|
45
|
8
|
46 public void Init () {
|
|
47
|
|
48
|
0
|
49 baseStage = new GameObject ();
|
|
50 baseStage.name = "stage";
|
|
51 baseStage.transform.position = Vector3.zero;
|
4
|
52 GameObject.FindGameObjectWithTag ("Player").transform.SetParent (baseStage.transform);
|
8
|
53
|
|
54 jungle = SaveDataTest.jungle;
|
|
55 CreateStage (15);
|
|
56 }
|
|
57
|
|
58 public void SetCallback (StageCreateEndCallback c) {
|
|
59 this.callback = c;
|
|
60 print ("Set : "+ callback.Method);
|
|
61 }
|
|
62
|
|
63 public void AddCallback (StageCreateEndCallback c) {
|
|
64 this.callback += c;
|
|
65 print ("Add : " + callback.Method);
|
|
66 }
|
|
67
|
|
68 public void CreateStage (int n) {
|
|
69 for (int i = 0; i < n; i++) {
|
|
70 for (int j = 0; j < n; j++) {
|
|
71 CreateStageItem (new Vector3(i, 0, j));
|
|
72 }
|
|
73 }
|
|
74 if(callback != null)
|
|
75 callback ();
|
0
|
76 }
|
|
77
|
8
|
78 public void CreateItem (Vector3 v, int ItemID) {
|
|
79
|
|
80 TreeNode box_node = getTypeItem (0);
|
|
81
|
|
82 Attributes attr = box_node.getAttributes ();
|
|
83 string type = attr.getString ("Category");
|
|
84
|
|
85 TreeNode item_node = getItem (box_node, ItemID);
|
|
86
|
|
87 attr = item_node.getAttributes ();
|
11
|
88 ItemInfo iteminfo = attr.get<ItemInfo> ("ItemInfo");
|
8
|
89
|
|
90 GameObject item = Resources.Load<GameObject> ("Prefabs/" + type + "/Box");
|
|
91 GameObject obj = Instantiate (item);
|
11
|
92 obj.GetComponent<Item> ().SetItem (iteminfo ,TotalIndex);
|
8
|
93 obj.transform.position = new Vector3 (v.x, v.y, v.z);
|
|
94 obj.transform.SetParent (baseStage.transform);
|
|
95 obj.GetComponent<Item> ().SetCreateTreeNode ();
|
|
96
|
|
97 AddTotalIndex ();
|
0
|
98 }
|
|
99
|
8
|
100 public void CreateStageItem (Vector3 v) {
|
|
101 TreeNode box_node = getTypeItem (0);
|
|
102 Attributes attr = box_node.getAttributes ();
|
|
103
|
|
104 string type = attr.getString ("Category");
|
|
105 GameObject obj = Instantiate (Resources.Load<GameObject> ("Prefabs/" + type + "/Box"));
|
|
106 obj.transform.position = new Vector3 (v.x, v.y, v.z);
|
0
|
107 obj.transform.SetParent (baseStage.transform);
|
8
|
108 obj.GetComponent<Item> ().SetCreateTreeNode ();
|
|
109 SetY(obj, box_node);
|
|
110 AddTotalIndex ();
|
0
|
111 }
|
|
112
|
8
|
113 public TreeNode getTypeItem (int typeID) {
|
|
114 jungle = SaveDataTest.jungle;
|
|
115 JungleTree tree = jungle.getTreeByName ("ItemTree");
|
|
116 TreeNode node = tree.getRootNode ();
|
|
117 Children child = node.getChildren ();
|
|
118 return child.at (typeID).b ();
|
|
119 }
|
|
120
|
|
121 public TreeNode getItem (TreeNode node, int itemID) {
|
|
122 Children box_child = node.getChildren ();
|
|
123 TreeNode item_node = box_child.at (itemID).b ();
|
|
124 return item_node;
|
|
125 }
|
|
126
|
|
127 public void AddTotalIndex () {
|
|
128 TotalIndex++;
|
0
|
129 }
|
4
|
130
|
8
|
131 private void SetY(GameObject cube, TreeNode node){
|
|
132 float y = 0;
|
|
133
|
|
134 //パーリンノイズを使って高さを決める場合
|
|
135 if(_isPerlinNoiseMap){
|
|
136 float xSample = (cube.transform.localPosition.x) / _relief;
|
|
137 float zSample = (cube.transform.localPosition.z) / _relief;
|
|
138
|
|
139 float noise = Mathf.PerlinNoise(xSample, zSample);
|
|
140
|
|
141 y = _maxHeight * noise;
|
|
142 }
|
|
143 //完全ランダムで高さを決める場合
|
|
144 else{
|
|
145 y = UnityEngine.Random.Range (0, _maxHeight);
|
|
146 }
|
|
147
|
|
148 //滑らかに変化しない場合はyを四捨五入
|
|
149 if(!_isSmoothness){
|
|
150 y = Mathf.Round (y);
|
4
|
151 }
|
8
|
152
|
|
153 //位置設定
|
|
154 cube.transform.localPosition = new Vector3 (cube.transform.localPosition.x, y, cube.transform.localPosition.z);
|
|
155
|
|
156 //高さによって色を段階的に変更
|
|
157 Color color = Color.black;//岩盤っぽい色
|
|
158 int item_id = 1;
|
|
159
|
|
160 if(y > _maxHeight * 0.3f){ // grass
|
|
161 item_id = 0;
|
|
162 }
|
|
163 else if(y > _maxHeight * 0.2f){ // maguma
|
|
164 item_id = 1;
|
|
165 }
|
|
166 else if(y > _maxHeight * 0.1f){ // water
|
|
167 item_id = 3;
|
|
168 }
|
|
169
|
|
170 TreeNode item_node = getItem (node, item_id);
|
|
171 Attributes attr = item_node.getAttributes ();
|
|
172
|
10
|
173 // string subType = attr.getString ("Type");
|
|
174 // string broken = attr.getString ("Broken");
|
|
175 // string color_code = attr.getString ("Color");
|
8
|
176
|
10
|
177 ItemInfo item = attr.get<ItemInfo>("ItemInfo");
|
8
|
178
|
10
|
179 cube.GetComponent<Item> ().SetItem (item, TotalIndex);
|
0
|
180 }
|
|
181 }
|