NoteControl.cs
3.9 KB
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
114
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Threading;
public class NoteControl : MonoBehaviour
{
public AudioSource audioSource;
public TextAsset data;
private int waitting_time;
public float additional_time;
//다음화면까지 저장되어야하는 정보들.. 따로 파일 만들어야 할수 있음. 아니면 아예 최근플레이로 만들거나.
public int score;
public int max_combo;
public int current_combo;
public int[] PGBM_count = new int[4] { 0,0,0,0};
// 노트가 나올 채널과 시간이 담겨있는 리스트
private int[,] single_notelist = new int[10000, 2]; //[[채널],[시간]]
private int[,] double_notelist = new int[10000, 3]; //[[채널],[채널],[시간]]
private int[,] long_notelist = new int[10000, 3]; //[[채널][시간][시간]]
private int[,] slide_notelist = new int[10000, 2]; //[[채널],[시간]]
//각자 나올 노트의 갯수 , 현재 나온 노트의 갯수
private int[] notelist_count = new int[4] { 0, 0, 0, 0 };
private int[] real_count = new int[4] { 0, 0, 0, 0 };
//총 할당가능한 노트의 갯수, 할당한 노트의 갯수
private int limit_note = 20;
private int alloc_count = 0;
public GameObject[] allocate_notelist = new GameObject[20]; //limit_note
void Start()
{
//쓸 노트들 할당
for (int i = 0; i < limit_note; i++){
allocate_notelist[i] = GameObject.Find("Note_" + i);
//Debug.Log("Allocated note list : " + allocate_notelist[i].name);
}
//오디오랑 노트데이터 할당, 춤도 할당해줘야함.
audioSource = GetComponent<AudioSource>();
data = Resources.Load("Blueming3", typeof(TextAsset)) as TextAsset;
//파일 읽기
ReadNote();
StartCoroutine(CreateNote());
}
void ReadNote()
{
//노드정보있는파일 읽기
StringReader sr = new StringReader(data.text);
string line;
string noteclass;
line = sr.ReadLine();
while (line != null)
{
noteclass = line.Split(' ')[0];
// single note
if (noteclass == "0")
{
single_notelist[notelist_count[0], 0] = Convert.ToInt32(line.Split(' ')[1]);
single_notelist[notelist_count[0], 1] = Convert.ToInt32(line.Split(' ')[2]);
notelist_count[0] += 1;
Debug.Log(line);
}
line = sr.ReadLine();
}
}
public void musicStart()
{
audioSource.Play(); //오디오 재생
}
IEnumerator CreateNote()
{
//ReadNode에 적용된 시간마다 해당위치의 노드들 복사. //그때그떄 복사하는게 나을지 미리 다 만들어놓고 하나씩 내려보내는게 나을지?
Invoke("musicStart", 1.8f); //대충 2초라고 했지만 정확히 해야함.
float delaytime = 0;
//싱글노트
while (real_count[0] < notelist_count[0])
{
delaytime = single_notelist[real_count[0], 1];
yield return new WaitForSeconds(delaytime*0.001f); //delaytime만큼 대기
//(delay시간 = nextnote떨어질시간 - prevnote 떨어질시간)... 그렇게 메모장에 있다고 생각.
//할당할 노트에 채널할당, 활성화.
allocate_notelist[alloc_count].GetComponent<OneNote>().channel = single_notelist[real_count[0], 0];
allocate_notelist[alloc_count].GetComponent<OneNote>().isActive = true;
//instantious 와 destroy는 리소스 많이잡아먹으니까 20개 계속 번갈아 쓰도록
alloc_count++;
if (alloc_count >= limit_note) { alloc_count = 0; }
//single note에서 실제로 나온 노트수 up
real_count[0]++;
}
}
}