// [SerializeField] //public float[] normals; public FlowerPartData(FlowerPart flowerPart) { Mesh m = flowerPart.ml; name = flowerPart.partName; vertices = new float[m.vertexCount * 3]; for (int i = 0; i < m.vertexCount; i++) { vertices[i * 3] = m.vertices[i].x; vertices[i * 3 + 1] = m.vertices[i].y; vertices[i * 3 + 2] = m.vertices[i].z; } color = new float[3]; color[0] = flowerPart.lmat.color.r; color[1] = flowerPart.lmat.color.g; color[2] = flowerPart.lmat.color.b; triangles = new int[m.triangles.Length]; // initialize triangles array for (int i = 0; i < m.triangles.Length; i++) // Mesh's triangles is an array that stores the indices, sequentially, of the vertices that form one face { triangles[i] = m.triangles[i]; } uv = new float[m.uv.Length * 2]; // initialize uvs array for (int i = 0; i < m.uv.Length; i++) // uv's Vector2 values are serialized similarly to vertices' Vector3 { uv[i * 2] = m.uv[i].x; uv[i * 2 + 1] = m.uv[i].y; } }
public void loadEconomy() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 16; j++) { partsEconomy[i, j] = new FlowerPart(PlayerPrefs.GetString("economy_" + i + "_" + j)); } } }
public void swap(FlowerPart a, FlowerPart b) { int temp = b.targetIndex; b.targetIndex = a.targetIndex; a.targetIndex = temp; a.targetValue = (float)categories[a.targetIndex] + Random.Range(0f, (float)max[a.targetIndex] - categories[a.targetIndex]); b.targetValue = (float)categories[b.targetIndex] + Random.Range(0f, (float)max[b.targetIndex] - categories[b.targetIndex]); a.updateJumps(Random.Range(lowerJumpRange[(int)jumpIndex.l], lowerJumpRange[(int)jumpIndex.u]), Random.Range(upperJumpRange[(int)jumpIndex.l], upperJumpRange[(int)jumpIndex.u])); b.updateJumps(Random.Range(lowerJumpRange[(int)jumpIndex.l], lowerJumpRange[(int)jumpIndex.u]), Random.Range(upperJumpRange[(int)jumpIndex.l], upperJumpRange[(int)jumpIndex.u])); }
public void SaveFlowerPart(FlowerPart flowerPart) { BinaryFormatter formatter = new BinaryFormatter(); string path = Application.persistentDataPath + "/" + flowerPart.ml.name + ".flwpt"; FileStream stream = new FileStream(path, FileMode.Create); FlowerPartData data = new FlowerPartData(flowerPart); formatter.Serialize(stream, data); stream.Close(); Debug.Log("Saving Part " + flowerPart.partName); }
/* * //reconstruct flower part from mesh * public static GameObject createFlowerPart(Mesh m, Material mat) * { * GameObject flwprt = new GameObject(m.name); * flwprt.AddComponent<MeshFilter>().mesh = m; * flwprt.AddComponent<MeshRenderer>(); * MeshCollider mshC = flwprt.AddComponent<MeshCollider>(); * FlowerPart pt = flwprt.AddComponent<FlowerPart>(); * pt.ml = m; * pt.lmat = new Material(mat); * Debug.Log(m.colors[0]); * if (m.colors.Length != 0) * pt.lmat.color = m.colors[0]; * * return flwprt; * }*/ // Creating part objects from scratch public static GameObject createPartObject(string name, Material mat) { GameObject obj = new GameObject(name); obj.AddComponent <MeshFilter>(); obj.AddComponent <MeshRenderer>(); FlowerPart part = obj.AddComponent <FlowerPart>(); part.partName = name; part.setWidth(.03f); part.lmat = new Material(mat); part.lmat.color = ColorManager.Instance.GetCurrentColor(); return(obj); }
// restoring flower part from DB public FlowerPart getFlowerPart(Material mat) { GameObject obj = new GameObject(name); obj.AddComponent <MeshFilter>(); obj.AddComponent <MeshRenderer>(); //obj.AddComponent<MeshCollider>().convex = true; FlowerPart part = obj.AddComponent <FlowerPart>(); part.partName = name; Mesh m = new Mesh(); List <Vector3> verticesList = new List <Vector3>(); for (int i = 0; i < vertices.Length / 3; i++) { verticesList.Add(new Vector3( vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2] )); } m.SetVertices(verticesList); m.triangles = triangles; List <Vector2> uvList = new List <Vector2>(); for (int i = 0; i < uv.Length / 2; i++) { uvList.Add(new Vector2( uv[i * 2], uv[i * 2 + 1] )); } m.SetUVs(0, uvList); m.RecalculateNormals(); obj.GetComponent <MeshFilter>().mesh = m; part.ml = m; part.lmat = new Material(mat); part.lmat.color = new Color(color[0], color[1], color[2]); return(part); }
public static GameObject LoadFlowerPart(string name, Material mat) { string path = Application.persistentDataPath + "/" + name + ".flwpt"; if (File.Exists(path)) { BinaryFormatter formatter = new BinaryFormatter(); FileStream stream = new FileStream(path, FileMode.Open); FlowerPartData data = (FlowerPartData)formatter.Deserialize(stream); stream.Close(); FlowerPart part = data.getFlowerPart(mat); Debug.Log("Loading Part " + name); return(part.gameObject); } else { Debug.Log("save file " + path + " not found"); return(null); } }
// Update is called once per frame void Update() { if (!targetDevice.isValid) { TryInitialize(); } else { if (targetDevice.TryGetFeatureValue(CommonUsages.triggerButton, out bool triggerButton)) { if (triggerButton && counter == 0) { if (flower == null) { flower = Flower.createFlowerObject(nextFlowerIndex).GetComponent <Flower>(); } int index = flower.parts.Count; GameObject partObj = FlowerPart.createPartObject(flower.flowerName + "." + index.ToString(), material);//FlowerPart(flower.flowerName+index.ToString()); partObj.transform.parent = flower.gameObject.transform; currentPart = partObj.GetComponent <FlowerPart>(); currentPart.setWidth(.01f + slider.value * .1f); counter++; } else if (triggerButton) { currentPart.AddPoint(ptr.transform.position, pen.transform.rotation); counter++; } else if (counter > 0) { flower.parts.Add(currentPart.gameObject); counter = 0; currentPart = null; } } } }
// Start is called before the first frame update void Start() { if (instance == null) { instance = this; } else { Destroy(gameObject); return; } mainCamera = Camera.main; player = GameObject.Find("FPSController").GetComponent <FlowerPlayerControler>(); foreach (MeshFilter filter in GetComponentsInChildren <MeshFilter>()) { filter.mesh.bounds = new Bounds(Vector3.zero, new Vector3(10, 20, 10)); } if (PlayerPrefs.HasKey("economy_0_0")) { loadEconomy(); } else { for (int x = 0; x < 4; x++) { List <int> toPickFrom = new List <int>(); List <int> toPickFrom2 = new List <int>(); for (int y = 0; y < 16; y++)//for every part of the flower the possible options are shuffleded { toPickFrom.Add(y); toPickFrom2.Add(y); } for (int y = 0; y < 16; y++) { int rand = Random.Range(0, toPickFrom.Count);//pick random start int index = toPickFrom[rand]; toPickFrom.RemoveAt(rand); float currentVal = (float)categories[index] + Random.Range(0f, (float)max[index] - categories[index]); rand = Random.Range(0, toPickFrom2.Count);//pick random target int index2 = toPickFrom2[rand]; toPickFrom2.RemoveAt(rand); float targetVal = (float)categories[index2] + Random.Range(0f, (float)max[index2] - categories[index2]); partsEconomy[x, y] = new FlowerPart(index, index2, currentVal, targetVal, Random.Range(lowerJumpRange[(int)jumpIndex.l], lowerJumpRange[(int)jumpIndex.u]), Random.Range(upperJumpRange[(int)jumpIndex.l], upperJumpRange[(int)jumpIndex.u])); } } float minValue = 20f; int[,] shuffleHelper = //I want to make sure there is at least one of each part on home planet that is worth more than minValue, having this makes the following code easier { { 1, 2, 4, 7 }, //these are the parts that are available on homeworld { 0, 4, 9, 11 }, { 0, 2, 8, 15 }, { 0, 1, 3, 6 } }; for (int i = 0; i < 4; i++) { //if nothing is above minValue if (partsEconomy[i, shuffleHelper[i, 0]].currentValue < minValue && partsEconomy[i, shuffleHelper[i, 1]].currentValue < minValue && partsEconomy[i, shuffleHelper[i, 2]].currentValue < minValue && partsEconomy[i, shuffleHelper[i, 3]].currentValue < minValue) { //find one that is and swap them int toAdjust = shuffleHelper[i, Random.Range(0, 4)]; int newOne = Random.Range(0, 16); while (partsEconomy[i, newOne].currentValue < minValue) { newOne = Random.Range(0, 16); } FlowerPart temp = partsEconomy[i, newOne]; partsEconomy[i, newOne] = partsEconomy[i, toAdjust]; partsEconomy[i, toAdjust] = temp; } } } totalFlowersSold = startingWorldCount; //sell balance test /*string toPrint = ""; * for (int i = 0; i < 4; i++) * { * toPrint += "{"; * for (int j = 0; j < 16; j++) * { * toPrint += partValue[i, j] + ", "; * } * toPrint = toPrint.Substring(0, toPrint.Length - 2); * toPrint += "}\n"; * } * print(toPrint); * for (int i = 0; i < 50; i++) * { * uint returnIndex = 0; * for (int j = 0; j < 8; j++) * { * returnIndex += (uint)Random.Range(0, 5); * returnIndex *= 16; * } * processFlowerSell(returnIndex); * } * for (int i = 0; i < 80; i++) * { * uint returnIndex = 0; * for (int j = 0; j < 8; j++) * { * returnIndex += (uint)Random.Range(0,9); * returnIndex *= 16; * } * processFlowerSell(returnIndex); * } * for (int i = 0; i < 110; i++) * { * uint returnIndex = 0; * for (int j = 0; j < 8; j++) * { * returnIndex += (uint)Random.Range(0, 13); * returnIndex *= 16; * } * processFlowerSell(returnIndex); * } * for (int i = 0; i < 200; i++) * { * uint returnIndex = 0; * for (int j = 0; j < 8; j++) * { * returnIndex += (uint)Random.Range(0, 17); * returnIndex *= 16; * } * processFlowerSell(returnIndex); * } * toPrint = ""; * for (int i = 0; i < 4; i++) * { * toPrint += "{"; * for (int j = 0; j < 16; j++) * { * toPrint += partValue[i, j] + ", "; * } * toPrint = toPrint.Substring(0, toPrint.Length - 2); * toPrint += "}\n"; * } * print(toPrint);*/ }