示例#1
0
        // For moving around the position
        void Start()
        {
            xRotationSpeed           = Random.Range(-0.05f, 0.05f);
            yRotationSpeed           = Random.Range(-0.05f, 0.05f);
            zRotationSpeed           = Random.Range(-0.05f, 0.05f);
            transform.eulerAngles    = new Vector3(Random.Range(-90f, 90f), Random.Range(-90f, 90f), Random.Range(-90f, 90f));
            _startRotation           = transform.eulerAngles;
            WolrdSegmentBuffer       = new ComputeBuffer(numberOfSpherePoints, Marshal.SizeOf(typeof(WorldSegment)));
            WorldSegmentRenderBuffer = new ComputeBuffer(numberOfSpherePoints, Marshal.SizeOf(typeof(WorldSegment)));
            var cData = new WorldSegment[numberOfSpherePoints];

            for (int i = 0; i < cData.Length; i++)
            {
                Vector3 start = Random.onUnitSphere * radius;
                Vector3 end   = start + start.normalized * Random.Range(1f, 2f) * lineScale;
                cData[i].Start = start;
                cData[i].End   = end;
                cData[i].speed = Random.Range(0.1f, 0.5f);
            }
            WolrdSegmentBuffer.SetData(cData);
            WorldSegmentRenderBuffer.SetData(cData);
            cData                   = null;
            lineRenderMat           = new Material(LineRender);
            lineRenderMat.hideFlags = HideFlags.HideAndDontSave;
        }
示例#2
0
    private void UpdatePosition()
    {
        if (CurrentSegment == null)
        {
            WorldSettingsOnWorldInitialized();
            return;
        }
        if (SegmentPosition > CurrentSegment.Length)
        {
            OnSegmentChanged?.Invoke(LeftSegment);
            RightSegment   = CurrentSegment;
            CurrentSegment = LeftSegment;
            LeftSegment    = worldGenerator.GetPreviousSegment(CurrentSegment);
        }
        else if (SegmentPosition < 0)
        {
            OnSegmentChanged?.Invoke(RightSegment);
            LeftSegment    = CurrentSegment;
            CurrentSegment = RightSegment;
            RightSegment   = worldGenerator.GetNextSegment(CurrentSegment);
        }

        SegmentPosition = transform.InverseTransformPoint(CurrentSegment.transform.position).x;
        GlobalPosition  = SegmentPosition + worldGenerator.GetRemainingSegmentsLength(CurrentSegment);
    }
示例#3
0
    public WorldSegment GetNextSegment(WorldSegment segment)
    {
        var nextIndex = segments.IndexOf(segment) + 1;

        if (nextIndex >= segments.Count)
        {
            return(segments.FirstOrDefault());
        }
        return(segments[nextIndex]);
    }
示例#4
0
    public WorldSegment GetPreviousSegment(WorldSegment segment)
    {
        var previousIndex = segments.IndexOf(segment) - 1;

        if (previousIndex < 0)
        {
            return(segments.LastOrDefault());
        }
        return(segments[previousIndex]);
    }
 public void OnWorldSegmentEvent(SegmentEvent Event, GameObject Reporter, WorldSegment Segment)
 {
     if (Event == SegmentEvent.TriggerEnter)
     {
         OnWorldSegmentEnter(Segment, Reporter);
     }
     else
     {
         OnWorldSegmentExit(Segment, Reporter);
     }
 }
示例#6
0
    public float GetRemainingSegmentsLength(WorldSegment segment)
    {
        float length = 0;
        var   currentPlayerSegment = segments.IndexOf(segment);

        for (int i = currentPlayerSegment + 1; i < segments.Count; i++)
        {
            length += segments[i].Length;
        }

        return(length);
    }
示例#7
0
        public IEnumerator anchoring_left_of_another_segment_sets_aligns_position_to_another_segment_length()
        {
            yield return(TestHelpers.LoadEmptyTestScene());

            WorldSegment firstSegment  = GetWorldSegment();
            WorldSegment secondSegment = GetWorldSegment();

            secondSegment.transform.localScale = new Vector3(2, 1, 1);
            secondSegment.AnchorLeft(firstSegment);
            yield return(null);

            Assert.AreEqual(firstSegment.transform.position.x - firstSegment.Length, secondSegment.transform.position.x);
        }
 private void AdjustPosition(WorldSegment segment)
 {
     if (position.SegmentPosition > position.CurrentSegment.Length)
     {
         var adjustedPosition = new Vector3(segment.transform.position.x - segmentSwitchDeadzone, transform.position.y, transform.position.z);
         transform.position = adjustedPosition;
     }
     else if (position.SegmentPosition < 0)
     {
         var adjustedPosition = new Vector3(segment.transform.position.x - segment.Length + segmentSwitchDeadzone, transform.position.y, transform.position.z);
         transform.position = adjustedPosition;
     }
 }
示例#9
0
    public WorldSegment CreateSegment(WorldSegment prefab)
    {
        var newSegment  = Object.Instantiate(prefab);
        var lastSegment = segments.LastOrDefault();

        if (lastSegment != null)
        {
            newSegment.AnchorRight(lastSegment);
        }

        segments.Add(newSegment);
        OnSegmentCreated?.Invoke(newSegment);
        return(newSegment);
    }
    public void GenerateNextSegment(float difficulty)
    {
        List <WorldSegment> diffSegmentated = new List <WorldSegment>();

        foreach (WorldSegment segment in allPossibleSegments)
        {
            if (segment.difficultyMinimum <= difficulty && segment.difficultyMaximum >= difficulty)
            {
                if ((segment.inputPipeType & lastOutputPipeType) > 0 && (segment.sequenceName != lastSegment || timesMoreForRoll > 0))
                {
                    for (int time = 0; time < segment.rollChance; time++)
                    {
                        diffSegmentated.Add(segment);
                    }
                }
            }
        }
        if (diffSegmentated.Count == 0)
        {
            return;
        }
        WorldSegment chosenSegment = diffSegmentated[random.Next(0, diffSegmentated.Count)];

        if ((int)((PlayerBoxController.instance.playerCube.position.y / 0.32f) + 5) > 1000 && thousandMonument != null)
        {
            chosenSegment    = thousandMonument;
            thousandMonument = null;
        }
        GenerateSegment(chosenSegment);
        if (lastSegment == chosenSegment.sequenceName)
        {
            timesMoreForRoll--;
        }
        else
        {
            lastSegment = chosenSegment.sequenceName;
            if (chosenSegment.timesAllowedInSequence > 0)
            {
                timesMoreForRoll = chosenSegment.timesAllowedInSequence - 1;
            }
            else
            {
                timesMoreForRoll = int.MaxValue;
            }
        }
    }
示例#11
0
 private void WorldSettingsOnWorldInitialized()
 {
     CurrentSegment = worldGenerator.GetSegmentAt(transform.position.x);
     LeftSegment    = worldGenerator.GetPreviousSegment(CurrentSegment);
     RightSegment   = worldGenerator.GetNextSegment(CurrentSegment);
 }
 public void OnWorldSegmentExit(WorldSegment Segment, GameObject Reporter)
 {
     // Log("Exited " + seg.name);
 }
 public void OnWorldSegmentExit(WorldSegment Segment, GameObject Reporter)
 {
     Log(Reporter.name + " exited " + Segment.name);
 }
示例#14
0
    public void AnchorLeft(WorldSegment anchoringSegment)
    {
        var anchorX = anchoringSegment.transform.position.x - anchoringSegment.Length;

        transform.position = new Vector3(anchorX, 0, 0);
    }
 public void GenerateSegment(WorldSegment chosenSegment)
 {
     SetNextTileSegment(chosenSegment.GetSegmentTiles(random, lethalBlock));
     nextYLevelToGenerate += chosenSegment.segmentYEnd;
     lastOutputPipeType    = chosenSegment.outputPipeType;
 }