예제 #1
0
    void PlaceItems(List <Room> rooms, LevelManager level)
    {
        List <Room> roomsToChooseBetween = new List <Room> {
        };

        foreach (Room room in rooms)
        {
            if (room != level.firstRoom && room != level.lastRoom)
            {
                roomsToChooseBetween.Add(room);
            }
        }
        Room chosenRoom = roomsToChooseBetween[Random.Range(0, roomsToChooseBetween.Count)];
        Key  theKey     = Instantiate(blueprint.key, new Vector3(chosenRoom.transform.position.x + level.roomSize.x / 2, chosenRoom.transform.position.y + level.roomSize.y / 2 + 3f, chosenRoom.transform.position.z), Quaternion.identity, chosenRoom.transform);

        chosenRoom.myItem = theKey;
        chosenRoom.myItem.gameObject.SetActive(false);
        roomsToChooseBetween.Remove(chosenRoom);

        List <PickUp> pickUpProbabilityList = new List <PickUp>()
        {
        };

        foreach (Blueprint.PickUpEntry pickup in blueprint.pickUps)
        {
            if (DebugManager.SpawnOnlyBalls && !pickup.item.gameObject.GetComponent <PowerUp>())
            {
                continue;
            }
            for (int i = 0; i < (int)pickup.rarity; i++)
            {
                pickUpProbabilityList.Add(pickup.item);
            }
        }

        foreach (Room room in roomsToChooseBetween)
        {
            PickUp newItem = Instantiate(pickUpProbabilityList[Random.Range(0, pickUpProbabilityList.Count)], new Vector3(room.transform.position.x + level.roomSize.x / 2, room.transform.position.y + level.roomSize.y / 2, room.transform.position.z), Quaternion.identity, room.transform);
            room.myItem = newItem;
            room.myItem.gameObject.SetActive(false);
            if (newItem.GetComponent <PowerUp>())
            {
                GameObject temp = Instantiate(blueprint.powerUpBalls[(int)newItem.GetComponent <PowerUp>().myType - 1], new Vector2(10000, 10000), Quaternion.identity, transform);
                projectiles.balls.Add(temp.GetComponent <Ball>());
                temp.SetActive(false);
            }
        }
    }
예제 #2
0
    void GrabAndDrag()
    {
        #region Grabbing and Dragging
        // Left Bumper picks up player when held
        if (Input.GetAxisRaw(pickUp) > 0 && !pickUpMode && inRange && !ragdolling)
        {
            pickUpMode     = true;
            draggingPlayer = true;
        }
        else if (Input.GetAxisRaw(pickUp) == 0 && pickUpMode)
        {
            draggingPlayer    = false;
            pickUpScript.join = false;
            Destroy(pickUpScript.GetComponent <SpringJoint>());
            pickUpMode = false;
        }

        // Current Setup for picking up player
        if (pickUpMode && inRange && !pickUpScript.join && ClosestPlayer.GetComponentInParent <PlayerController>().ragdolling)
        {
            pickUpScript.join = false;
            pickUpScript.CreateJoint();
        }
        #endregion
    }
예제 #3
0
    private void OnPlayerFinishedMinigame(PickUp pickUpToCollect)
    {
        // Give physics back to the player
        rb.isKinematic = false;

        playerState = PlayerState.Normal;

        // Attach the pickup to player
        Debug.Log(pickUpToCollect);
        Debug.Log(pickUpToCollect.minigame);
        pickUpToCollect.minigame.EndMinigame();
        heldPickup = pickUpToCollect;
        heldPickup.transform.parent.SetParent(transform);
        heldPickup.transform.parent.Translate(manager.playersDistance, 0, 0, Space.World);
        heldPickup.transform.parent.position        += transform.up * 5f;
        heldPickup.GetComponent <Collider>().enabled = false;

        foreach (Player player in manager.players)
        {
            player.UnregisterHoveredPickUp(heldPickup);
        }

        hoveredPickUp = null;

        anim.SetBool("isInteracting", false);
    }
예제 #4
0
    private void SpawnCow()
    {
        float  cowSize  = 0.5f;
        PickUp cowClone = (PickUp)Instantiate(pickupPrefab, transform.position, transform.rotation);

        cowClone.transform.SetParent(cowParent.transform);
        cowClone.transform.localPosition = new Vector3(Random.Range(-6f, 6f), cowParent.transform.position.y, 0f);
        cowClone.transform.localScale    = new Vector3(cowSize, cowSize, 0);
        cowClone.GetComponent <Rigidbody2D>().velocity = new Vector2(0, Random.Range(-7, -3));
    }
        private void EndThrowItem()
        {
            hasThrownItem = true;
            givenItem.VikingDropItem();

            Vector3 throwDirection = -viking.transform.forward;

            throwDirection.y = 0.7f;

            givenItem.GetComponent <Rigidbody>().velocity =
                MathX.RandomDirectionInCone(throwDirection, viking.itemThrowConeHalfAngle) *
                viking.throwStrength;
        }
예제 #6
0
 RabboidModBase PickUptoBase(PickUp _pickUp)
 {
     if (_pickUp.GetComponent <ColorModPickUp>())
     {
         return(_pickUp.GetComponent <ColorModPickUp>().m_colourMod);
     }
     else if (_pickUp.GetComponent <BackModPickUp>())
     {
         return(_pickUp.GetComponent <BackModPickUp>().m_bodyPart);
     }
     else if (_pickUp.GetComponent <MouthModPickUp>())
     {
         return(_pickUp.GetComponent <MouthModPickUp>().m_mouthMod);
     }
     else if (_pickUp.GetComponent <SizeModPickUp>())
     {
         return(_pickUp.GetComponent <SizeModPickUp>().m_sizeMod);
     }
     else
     {
         Debug.Log("SCREAMING");
         return(null);
     }
 }
예제 #7
0
    void SpawnShuttleParts(Planet planet)
    {
        currentPickups = 0;
        //initialize mesh (Denis stuff)
        //Place Pickups
        //Place shuttle
        //initialize planet variables
        // Place shuttle

        /*RaycastHit hit;
         * Vector3 dir = Random.insideUnitCircle.normalized;
         * dir.z = dir.x;
         * dir.x = 0;
         * if (Physics.Raycast(planet.transform.position, dir, out hit, Mathf.Infinity, layerMask))
         * {*/
        int value = shuttle.shuttleParts.Count;
        var fire  = shuttle.fireParticleSystem.main;

        fire.startLifetime = 5.0f * value;
        var smoke = shuttle.smokeParticleSystem.main;

        smoke.startLifetime = 5.0f * value;

        shuttle.transform.position = planet.crashPoint;
        shuttle.transform.rotation = Quaternion.identity;
        shuttle.gameObject.transform.LookAt(planet.transform.position, Vector3.Cross(planet.transform.up, (planet.transform.position - shuttle.gameObject.transform.position).normalized));
        shuttle.transform.Translate(shuttleObjectsDistance, 0, 0, Space.World);
        //}
        planet.Init(-9.7f);


        List <Vector3> pickupPositions = new List <Vector3>();

        pickupPositions.Add(new Vector3(shuttle.transform.position.x, shuttle.transform.position.y, shuttle.transform.position.z));
        int placingTry    = 0;
        int maxIterations = 5;

        RaycastHit hit;
        int        layerMask = 1 << 10;

        for (int i = 0; i < shuttle.shuttleParts.Count; i++)
        {
            RaycastHit partPlanetHit;
            Vector3    dir = Random.insideUnitCircle.normalized;
            dir.z = dir.x;
            dir.x = 0;
            //hits ONLY planet
            layerMask = 1 << 10;
            //this sucks!!
            Physics.Raycast(planet.transform.position, dir, out partPlanetHit, Mathf.Infinity, layerMask);
            float planetCircumference = 2 * partPlanetHit.distance * Mathf.PI;
            float placingDistance     = planetCircumference / ((float)shuttle.shuttleParts.Count * 2);


            placingTry = 0;
            while (placingTry < maxIterations)
            {
                dir   = Random.insideUnitCircle.normalized;
                dir.z = dir.x;
                dir.x = 0;
                bool canPlace = true;

                if (Physics.Raycast(planet.transform.position, dir, out partPlanetHit, Mathf.Infinity, layerMask))
                {
                    for (int p = 0; p < pickupPositions.Count; p++)
                    {
                        if (Vector3.Distance(pickupPositions[p], partPlanetHit.point) < placingDistance)
                        {
                            //is too close: jump back to while and increase placing try
                            placingTry++;
                            canPlace = false;
                            p        = pickupPositions.Count;
                        }
                    }
                }
                if (canPlace)
                {
                    placingTry = maxIterations;
                }
            }

            Debug.DrawRay(planet.transform.position, dir * 500, Color.yellow, 60);
            placingTry = 0;
            // Instantiate the part
            GameObject shuttlePart    = shuttle.shuttleParts[i];
            Transform  spawnTransform = shuttlePart.transform.Find("Spawnpoint");
            PickUp     pickUp         = spawnTransform.gameObject.AddComponent <PickUp>();
            int        index          = new int();
            index        = i;
            pickUp.index = index;

            shuttlePart.transform.SetParent(null);
            shuttlePart.transform.localScale         = Vector3.one * partScaleFactor;
            pickUp.GetComponent <Collider>().enabled = true;

            Vector3    up             = partPlanetHit.point - planet.transform.position;
            Quaternion lookRotation   = Quaternion.LookRotation(new Vector3(-1, 0, 0), up);
            Quaternion offsetRotation = lookRotation * Quaternion.Inverse(spawnTransform.rotation);
            shuttlePart.transform.rotation = offsetRotation * shuttlePart.transform.rotation;


            Vector3 offsetPosition = partPlanetHit.point - spawnTransform.position;
            shuttlePart.transform.position += offsetPosition;
            shuttlePart.transform.Translate(shuttleObjectsDistance, 0, 0, Space.World);

            pickupPositions.Add(new Vector3(shuttlePart.transform.position.x, shuttlePart.transform.position.y, shuttlePart.transform.position.z));
        }

        StartCoroutine(SpawnPrefabForTime(impactParticleSystem, shuttle.transform.position, shuttle.transform.rotation));
    }