// [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);
    }
Example #5
0
    /*
     * //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);
        }
    }
Example #8
0
 // 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);*/
    }