public void RemoveLane(LaneObject laneObject)
 {
     if (Lanes.Contains(laneObject))
     {
         Lanes.Remove(laneObject);
     }
 }
Пример #2
0
    private void CreateCoins()
    {
        LaneObject laneObject      = TrackManager.Instance.GetRandomLane();
        int        targetCoinCount = Random.Range(5, 10);

        StartCoroutine(CreateCoinsCo(laneObject, targetCoinCount));
    }
 public void AddLane(LaneObject laneObject)
 {
     if (!Lanes.Contains(laneObject))
     {
         Lanes.Add(laneObject);
     }
 }
    private void JumpToLane(LaneObject laneObject)
    {
        if (isJumping)
        {
            return;
        }

        isJumping = true;

        transform.DOJump(new Vector3(laneObject.transform.position.x, transform.position.y, transform.position.z), 1f, 1, 0.3f)
        .OnComplete(() => {
            isJumping = false;
        });
        Character.OnCharacterSwitchLane.Invoke();
    }
Пример #5
0
    private IEnumerator CreateCoinsCo(LaneObject laneObject, int targetCoinCount)
    {
        yield return(new WaitForSeconds(Random.Range(0.5f, 1.5f)));

        for (int i = 0; i < targetCoinCount; i++)
        {
            GameObject coinObject = LevelManager.Instance.CurrentLevel.GetRandomLevelObject(LevelObjectType.Coin);
            Instantiate(coinObject, laneObject.transform.position + Vector3.up, Quaternion.identity,
                        TrackManager.Instance.GetLastTrackObject().transform);

            yield return(new WaitForSeconds(0.2f));
        }

        yield return(new WaitForSeconds(0.3f));

        CreatePowerUp();
        yield return(null);
    }
    public LaneObject GetClosestLane(Vector3 position)
    {
        float      minDistance = Mathf.Infinity;
        LaneObject closestLane = null;
        float      distance    = 0;

        for (int i = 0; i < Lanes.Count; i++)
        {
            distance = Vector3.Distance(Lanes[i].transform.position, position);

            if (distance < minDistance)
            {
                minDistance = distance;
                closestLane = Lanes[i];
            }
        }

        return(closestLane);
    }
    public void Move(Swipe swipe, Vector2 direction)
    {
        if (!Character.IsControlable)
        {
            return;
        }

        LaneObject laneObject = CurrentLane.GetLane(swipe);

        switch (swipe)
        {
        case Swipe.Up:
            Jump();
            break;

        case Swipe.Down:
            Slide();
            break;

        case Swipe.Left:
            if (laneObject == null)
            {
                return;
            }

            JumpToLane(laneObject);
            break;

        case Swipe.Right:
            if (laneObject == null)
            {
                return;
            }

            JumpToLane(laneObject);
            break;

        default:
            break;
        }
    }
Пример #8
0
 public void RemoveLane(LaneObject laneObject)
 {
 }
Пример #9
0
 public void AddLane(LaneObject laneObject)
 {
 }
 private IEnumerator CreateCoinsCo(LaneObject laneObject, int targetCoinCount)
 {
     yield return(null);
 }
Пример #11
0
 public void addLaneObject(LaneObject laneObject)
 {
     //todo check if valid... for now this is left to bga to make sure
     laneObjectStore.Add(laneObject);
 }
Пример #12
0
    //All peaks are detected - now its time to decide where these beats are going
    BeatMap makeBeatMap(int drift_length, int fly_length)
    {
        BeatMap beatMap = new BeatMap(settings, song_info, song_meta, songFilePath);

        int currLane      = 0;
        int currLaneCount = 0;

        int timeAfterFly = Mathf.FloorToInt(getIndexFromTime(BGACommon.TIME_AFTER_FLY_SECTION));

        int endFlyIndex = -1;

        for (int i = 0; i < output.peaks2.Length; i++)
        {
            float currTime = getTimeFromIndex(i);
            if (i == output.flySectionIndex)
            {
                LaneObject lObj1 = new LaneObject(i, currTime, -1, LANE_OBJECT_TYPE.START_FLY_TRIGGER);
                LaneObject lObj2 = new LaneObject(i + fly_length, getTimeFromIndex(i + fly_length), -1, LANE_OBJECT_TYPE.START_NORMAL_TRIGGER);
                endFlyIndex = i + drift_length;
                beatMap.addLaneObject(lObj1);
                beatMap.addLaneObject(lObj2);
                Debug.Log("Added the fly section triggers");
                continue;
            }
            else if (output.drifts[i] > 0)
            {
                LaneObject lObj1 = new LaneObject(i, currTime, -1, LANE_OBJECT_TYPE.START_DRIFT_TRIGGER);
                LaneObject lObj2 = new LaneObject(i + drift_length, getTimeFromIndex(i + drift_length), -1, LANE_OBJECT_TYPE.START_NORMAL_TRIGGER);
                beatMap.addLaneObject(lObj1);
                beatMap.addLaneObject(lObj2);
                continue;
            }
            else if (i == endFlyIndex)   //Don't spawn anything after a <fly> section so that the car can fall back to the track
            {
                endFlyIndex = -1;
                i          += timeAfterFly;
                continue;
            }
            else if (output.peaks2[i] <= 0)
            {
                continue;
            }
            else if (currTime < settings.warm_up_time)   //we do not spawn notes until warm up time is done. So we spawn obstacles on L and R to show the beats
            {
                int        lane = (bga_random.Next(0, 2) == 1) ? 0 : 2;
                LaneObject lObj = new LaneObject(i, currTime, lane, LANE_OBJECT_TYPE.Obstacle);
                beatMap.addLaneObject(lObj);
            }
            else
            {
                //we have not spawned a beat yet, choose a random lane
                if (currLaneCount == 0)
                {
                    currLane      = bga_random.Next(0, 3);
                    currLaneCount = 1;
                }
                else
                {
                    if (bga_random.NextDouble() < BGACommon.CHANCE_TO_SWITCH_LANES)   //5 % chance we stay in the same lane
                    {
                        currLaneCount = 1;
                        int direction = (bga_random.Next(0, 2) == 1) ? -1 : 1; //move left or right? if on ends wrap around
                        currLane = Math.Abs((currLane + direction) % BGACommon.NUMBER_LANES);
                    }
                    else
                    {
                        currLaneCount += 1;
                    }
                    int randomObstacle = bga_random.Next(0, 4);
                    switch (randomObstacle)
                    {
                    case 0: break;

                    case 1:
                        //add an obstacle on lane n + 1
                        beatMap.addLaneObject(new LaneObject(i, currTime, Math.Abs((currLane + 1) % BGACommon.NUMBER_LANES), LANE_OBJECT_TYPE.Obstacle));
                        break;

                    case 2:
                        //add an obstacle on lane n - 1
                        beatMap.addLaneObject(new LaneObject(i, currTime, Math.Abs((currLane - 1) % BGACommon.NUMBER_LANES), LANE_OBJECT_TYPE.Obstacle));
                        break;

                    case 3:
                        //add an obstacle on lanes n - 1 and n + 1
                        beatMap.addLaneObject(new LaneObject(i, currTime, Math.Abs((currLane + 1) % BGACommon.NUMBER_LANES), LANE_OBJECT_TYPE.Obstacle));
                        beatMap.addLaneObject(new LaneObject(i, currTime, Math.Abs((currLane - 1) % BGACommon.NUMBER_LANES), LANE_OBJECT_TYPE.Obstacle));
                        break;

                    default:
                        throw new Exception("randomObstacle is an unexpected value! Expected [0, 3]; actual: " + randomObstacle);
                    }

                    LaneObject lObj = new LaneObject(i, currTime, currLane, LANE_OBJECT_TYPE.Beat);
                    beatMap.addLaneObject(lObj);
                }
            }
        }

        return(beatMap);
    }