Esempio n. 1
0
    private void Update()
    {
        if (GameplayController.GameIsStopped)
        {
            return;
        }

        float newProgress = (sequencerProgress + Time.deltaTime * sequencerSpeed);

        newProgress %= 1f;

        if (Looped(sequencerProgress, newProgress))
        {
            SequencerUIInstance.NudgeBar(newProgress); // may have some animation difference?
            CyclePassesCallback();
        }
        else
        {
            SequencerUIInstance.NudgeBar(newProgress);
        }


        // for each resource that is further on the timeline than we used to be, and behind where we are now, pop
        // if we looped, and we used to be behind a resource, then pop
        if (nextResourceTime.HasValue && ShouldProcSequence(nextResourceTime.Value, sequencerProgress, newProgress))
        {
            Debug.Log($"Spawning resources, progress is {sequencerProgress} and newProgress is {newProgress}");

            foreach (ResourceNode resource in ResourcesOnSequencer.Where(kvp => ShouldProcSequence(kvp.Key, sequencerProgress, newProgress)).Select(kvp => kvp.Value))
            {
                Debug.Log($"Resource Spawning from Sequencer: {resource.RepresentedResource.ResourceName}");
                SequencerResourcePopCallback(resource.RepresentedResource);
                resource.PingNode();
            }

            // find the next resource after our new position
            // if there isn't one, then find the first on the timeline
            if (ResourcesOnSequencer.Any(r => r.Key > newProgress))
            {
                nextResourceTime = ResourcesOnSequencer.First(r => r.Key > newProgress).Key;
            }
            else
            {
                nextResourceTime = ResourcesOnSequencer.First().Key;
            }

            if (nextResourceTime.HasValue)
            {
                Debug.Log($"Next Resource Time: {nextResourceTime.Value}");
            }
        }

        sequencerProgress = newProgress;
    }
Esempio n. 2
0
    public void AddResource(GameResource resource, float?time = null)
    {
        if (!time.HasValue)
        {
            time = Random.Range(.05f, .95f);
        }

        ResourceNode newNode = SequencerUIInstance.AddResource(resource, time.Value);

        ResourcesOnSequencer.Add(time.Value, newNode);

        // Detect if we should update the next resource time to this one
        // There were good intentions with this code, but it's gotten away from us a bit
        if (!nextResourceTime.HasValue || // We don't have a value yet, use this one
            (sequencerProgress < time.Value && time < nextResourceTime.Value) || // We have a value, and it's after this new one
            (Looped(sequencerProgress, time.Value) && Looped(sequencerProgress, nextResourceTime.Value) && time < nextResourceTime.Value))    // When we loop, this value is next
        {
            nextResourceTime = time;
        }

        Debug.Log($"Resource Added to Sequencer: {resource.ResourceName}");
    }