public static void SpawnBlood(int amt, Vector3 loc, Vector3 dir) { InitIfNeeded(); //Blood_Splatter.spawnSplatter(loc,dir); dir.Normalize(); Vector3 baseDir = dir; loc.z = 0; for (int i = 0; i < amt; i++) { dir = baseDir; Blood_Handler handler = new Blood_Handler(); handler.pos = loc; handler.index = Generic_Mesh_Script.GetIndex("Mesh_Blood"); handler.meshScript = Generic_Mesh_Script.GetMeshScript("Mesh_Blood"); dir.x += Random.Range(-.4f, .4f); dir.y += Random.Range(-.4f, .4f); Vector3 velocity = dir.normalized; //handler.speed = 13f * Random.Range(2f,7f); handler.speed = 20f * Random.Range(3f, 6f); handler.velocity = velocity; handler.eulerY = Random.Range(0, 360); Generic_Mesh_Script.AddGeneric("Mesh_Blood", handler.pos, handler.eulerY, handler.material, 0f, baseSize, false); instanceList.Add(handler); } }
private void Update() { timer -= deltaTime; if (timer < 0) { Generic_Mesh_Script.UpdateGeneric("Mesh_Top", index, Vector3.zero, 0f, 0, 0f, Vector3.zero, false); shootList.Remove(this); } }
private Shoot_Flash(Vector3 pos) { index = Generic_Mesh_Script.GetIndex("Mesh_Top"); Generic_Mesh_Script.AddGeneric("Mesh_Top", pos, 0f, 0, 0f, baseSize, false); }
private void addGeneric(Vector3 pos, float rot, int material, float offset, Vector3 baseDir, bool skewed) { if (index >= amtMax) { return; } update = true; //pos.z -= offset; //Relocate vertices int vIndex = index * 4; int vIndex0 = vIndex; int vIndex1 = vIndex + 1; int vIndex2 = vIndex + 2; int vIndex3 = vIndex + 3; if (skewed) { vertices[vIndex0] = pos + GetQuaternionEuler(rot) * new Vector3(-baseDir.x, baseDir.y); vertices[vIndex1] = pos + GetQuaternionEuler(rot) * new Vector3(-baseDir.x, -baseDir.y); vertices[vIndex2] = pos + GetQuaternionEuler(rot) * new Vector3(baseDir.x, -baseDir.y); vertices[vIndex3] = pos + GetQuaternionEuler(rot) * baseDir; } else { vertices[vIndex0] = pos + GetQuaternionEuler(rot - 270) * baseDir; vertices[vIndex1] = pos + GetQuaternionEuler(rot - 180) * baseDir; vertices[vIndex2] = pos + GetQuaternionEuler(rot - 90) * baseDir; vertices[vIndex3] = pos + GetQuaternionEuler(rot - 0) * baseDir; } //Relocate UVs uvs[vIndex0] = presetUV[material * 4 + 0]; uvs[vIndex1] = presetUV[material * 4 + 1]; uvs[vIndex2] = presetUV[material * 4 + 2]; uvs[vIndex3] = presetUV[material * 4 + 3]; //Create triangles int tIndex = index * 6; triangles[tIndex + 0] = vIndex0; triangles[tIndex + 1] = vIndex3; triangles[tIndex + 2] = vIndex1; triangles[tIndex + 3] = vIndex1; triangles[tIndex + 4] = vIndex3; triangles[tIndex + 5] = vIndex2; //index++; index = (index + 1) % amtMax; if (index == 0 && spawnNewMeshWhenFull) { //Create a new instance GameObject newInstance = new GameObject(name, typeof(MeshFilter), typeof(MeshRenderer), typeof(Generic_Mesh_Script)); Transform trans = newInstance.transform; trans.parent = transform.parent; trans.localPosition = transform.localPosition; newInstance.GetComponent <Renderer>().material = transform.GetComponent <MeshRenderer>().material; newInstance.GetComponent <Renderer>().sortingOrder = transform.GetComponent <Renderer>().sortingOrder; Generic_Mesh_Script meshScript = newInstance.GetComponent <Generic_Mesh_Script>(); meshScript.bounds = bounds; meshScript.amtMax = amtMax; meshScript.UVTextureSize = UVTextureSize; meshScript.UVList = UVList; meshScript.spawnNewMeshWhenFull = spawnNewMeshWhenFull; dictionary[name] = meshScript; int number = 2; for (int i = 0; i < 999; i++) { if (transform.parent.Find(name + "_" + number) == null) { break; } number++; } trans.name = name; name = name + "_" + number; meshScript.myAwake(); } }