少年修仙传客户端代码仓库
lcy
2024-12-16 a39c35fc6449430cd02bccb681c4a0a880e46cd9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
 
public class CreateRoleTimeLine
{
    public bool busying { get; private set; }
 
    Action onComplete;
    List<Node> nodes = new List<Node>();
    LogicUpdate update;
 
    public CreateRoleTimeLine()
    {
        update = new LogicUpdate();
        update.Start(OnUpdate);
    }
 
    public void AddNone(float time, Action task)
    {
        nodes.Add(new Node()
        {
            time = Time.time + time,
            task = task
        });
    }
 
    public void Begin()
    {
        busying = true;
    }
 
    public void Stop()
    {
        Reset();
        busying = false;
    }
 
    public void OnComplete(Action onComplete)
    {
        this.onComplete = onComplete;
    }
 
    public void ClearNode()
    {
        nodes.Clear();
    }
 
    public void Dispose()
    {
        ClearNode();
        if (update != null)
        {
            update.Destroy();
        }
    }
 
    private void Reset()
    {
        foreach (var node in nodes)
        {
            node.executed = false;
        }
    }
 
    private void OnUpdate()
    {
        var allExecuted = true;
        foreach (var node in nodes)
        {
            if (!node.executed)
            {
                if (Time.time >= node.time)
                {
                    node.Execute();
                }
            }
            else
            {
                allExecuted = false;
            }
        }
 
        if (allExecuted)
        {
            if (this.onComplete != null)
            {
                this.onComplete();
            }
 
            busying = false;
        }
    }
 
    public class Node
    {
        public bool executed;
        public float time;
        public Action task;
 
        public void Execute()
        {
            executed = true;
            if (task != null)
            {
                task();
            }
        }
    }
 
 
}