コード例 #1
0
 public LiftedObjectsGroup(LiftedObject liftedObject)
 {
     objectMass    = liftedObject.liftedRb.mass;
     liftedObjects = new List <LiftedObject>();
     liftedObjects.Add(liftedObject);
 }
コード例 #2
0
    private void GetRigidbodiesToLaunch()
    {
        // Recordar que la lista de objetos enganchados tendrá que estar limpia
        liftedObjects.Clear();
        //
        List <LiftedObjectsGroup> liftedGroups = new List <LiftedObjectsGroup>(4);
        // TODO: Mover al radio a variable pública
        float rangeToUse = 1500;

        Collider[] possibleBodies = Physics.OverlapSphere(transform.position, rangeToUse);
        //Debug.Log("" + possibleBodies.Length + " possible bodies");
        //
        for (int i = 0; i < possibleBodies.Length; i++)
        {
            // Primero que tenga esta tag
            // Igual usamos la de enemigo también (cuidado no atrapar a los que está vivos)
            if (possibleBodies[i].tag == "Hard Terrain")
            {
                // Luego que tenga rigidbody
                Rigidbody possibleRb = possibleBodies[i].GetComponent <Rigidbody>();
                if (possibleRb != null)
                {
                    //
                    accumulatedLiftMass += possibleRb.mass;
                    //
                    LiftedObject newLiftedObject =
                        new LiftedObject(possibleRb, possibleRb.position, possibleRb.position + (Vector3.up * 500), possibleRb.rotation);
                    // Vamos a ver que grupo le toca
                    float objectMass = possibleRb.mass;
                    LiftedObjectsGroup possibleExistantGroup = liftedGroups.Find(x => x.objectMass == objectMass);
                    if (liftedGroups.Count == 0 || possibleExistantGroup == null)
                    {
                        liftedGroups.Add(new LiftedObjectsGroup(newLiftedObject));
                        // TODO: Meter aquí las separaciones personalizadas
                        switch (objectMass)
                        {
                        // Columnas de hueso
                        case 1: liftedGroups[liftedGroups.Count - 1].spaceBetweenObjects = 2f; break;

                        // Pedrolos grodos
                        case 100: liftedGroups[liftedGroups.Count - 1].spaceBetweenObjects = 25; break;

                        // Otros (Ya iremos probando)
                        default: liftedGroups[liftedGroups.Count - 1].spaceBetweenObjects = 15; break;
                        }
                    }
                    else if (!possibleExistantGroup.full)
                    {
                        possibleExistantGroup.liftedObjects.Add(newLiftedObject);
                        //
                        if (possibleExistantGroup.GroupMass >= TotalLiftForce)
                        {
                            possibleExistantGroup.full = true;
                            // Salimos del for si todos los grupos están llenos
                            if (CheckIfAllGroupsAreFull(liftedGroups))
                            {
                                continue;
                            }
                        }
                    }
                    //
                    //liftedObjects.Add(newLiftedObject);
                    //
                    //if (accumulatedLiftMass >= TotalLiftForce)
                    //{
                    //    //
                    //    //Debug.Log("Lifting " + liftedObjects.Count + " objects with a total accumulated mass of" + accumulatedLiftMass);
                    //    accumulatedLiftMass = 0;
                    //    return;
                    //}
                }
            }
        }
        // Y decidimos que grupo tiene más chicha
        float maxMass = 0;

        for (int i = 0; i < liftedGroups.Count; i++)
        {
            if (liftedGroups[i].GroupMass > maxMass)
            {
                liftedObjects            = liftedGroups[i].liftedObjects;
                spaceBetweenObjectsToUse = liftedGroups[i].spaceBetweenObjects;
            }
        }
        // Y habrá que reajustar la matriz de lifting
        InitializePreLaunchPositionsListMatrix();
    }