Ejemplo n.º 1
0
    void Generate(BodyComponent bodyComponent, float size, Vector3 location)
    {
        for (int i = 0; i < 6; i++)
        {
            if (bodyComponent.GetFaceTypes()[i] == null)
            {
                if (Random.Range(0.0f, size) > 0.5f)
                {
                    Vector3 newLocation = location;

                    switch (i)
                    {
                    case 0:
                        newLocation.y -= 1;
                        break;

                    case 5:
                        newLocation.y += 1;
                        break;

                    case 1:
                        newLocation.x -= 1;
                        break;

                    case 4:
                        newLocation.x += 1;
                        break;

                    case 2:
                        newLocation.z -= 1;
                        break;

                    case 3:
                        newLocation.z += 1;
                        break;
                    }


                    //if there's space
                    if (!bodyComponents.ContainsKey(newLocation) && !weapons.ContainsKey(newLocation))
                    {
                        if (Random.Range(0.0f, size) < 1.0f)
                        {
                            //weapon
                            FaceType weapon = null;

                            if (Random.Range(0.0f, 1.0f) < FaceTypeChargeLaser.generateChance)
                            {
                                weapon = (FaceType)bodyComponent.AddFace(i, faceTypeChargeLaser);
                            }
                            else if (Random.Range(0.0f, 1.0f) < FaceTypeShot.generateChance)
                            {
                                weapon = (FaceType)bodyComponent.AddFace(i, faceTypeShot);
                            }

                            if (weapon != null)
                            {
                                weapons.Add(newLocation, weapon);
                                weapon.OnReadyActivation();
                            }
                        }
                        else
                        {
                            //connector

                            FaceTypeConnector ftc = (FaceTypeConnector)bodyComponent.AddFace(i, faceTypeConnector);

                            BodyComponent newBc;
                            if (Random.Range(0.0f, 1.0f) < size / 30.0f)
                            {
                                //core
                                newBc = NewBodyComponent(newLocation, true);
                            }
                            else
                            {
                                newBc = NewBodyComponent(newLocation);
                            }
                            int side = 5 - i;
                            FaceTypeConnector ftc2 = (FaceTypeConnector)newBc.AddFace(side, faceTypeConnector);
                            ftc2.ConnectToFace(ftc);

                            //make connections to existing blocks

                            /*
                             * for (int j = 0; j < 6; j++) {
                             *      Vector3 loc = newLocation;
                             *      switch(j) {
                             *      case 0:
                             *              loc.y -= 1;
                             *              break;
                             *      case 5:
                             *              loc.y += 1;
                             *              break;
                             *      case 1:
                             *              loc.x -= 1;
                             *              break;
                             *      case 4:
                             *              loc.x += 1;
                             *              break;
                             *      case 2:
                             *              loc.z -= 1;
                             *              break;
                             *      case 3:
                             *              loc.z -= 1;
                             *              break;
                             *      }
                             *
                             *      BodyComponent aroundBc;
                             *      if (bodyComponents.TryGetValue(loc, out aroundBc)) {
                             *              side = 5 - j;
                             *              if (aroundBc.GetFaceTypes()[side] == null) {
                             *                      FaceTypeConnector aroundFtc = (FaceTypeConnector)aroundBc.AddFace (side, faceTypeConnector);
                             *                      FaceTypeConnector thisFtc = (FaceTypeConnector)newBc.AddFace (j, faceTypeConnector);
                             *                      thisFtc.ConnectToFace (aroundFtc);
                             *              }
                             *      }
                             * }
                             */

                            //go deeper, size halves
                            Generate(newBc, size / 2.0f, newLocation);
                        }
                    }
                }
            }
        }
    }