일단 PlayerTurn = true랑 TurnOver = true 두 개 선언함
PlayerTurn은 시나리오 같은 데선 false로 시작하게 눈치껏 만들어놓고.... 암튼
PlayerTurn은 A팀과 B팀 사이를 오가는 데 사용하고
TurnOver는 PlayerTurn을 바꾸느냐 마느냐에 작용함
먼저 전에 쓰던 deploy를 고침
이미 18개가 배치된 상태에서 oDeploy의 정보를 각각의 오브젝트에 옮기는 방식이었는데...
대신에 oDeploy에 저장된 A1~A9, B1~B9까지의 정보를 차례대로 나눠주면서 oUnitA와 oUnitB 오브젝트를 9개씩 만듦 (혹은 그보다 적을 수 있음)
여기서 오브젝트를 만들 때 리스트에 저장하는 거임 oUnitA[0]부터 oUnitA[8]까지.... B도 마찬가지
당연하지만 1번의 정보는 [0], 2번의 정보는 [1]... 이렇게 들어가니까 공격 순서도 똑같이 배분됨
이제 여기서 oRoundManager는 턴의 판별을 위해 리스트 RoundOrder를 만들음
먼저 필드의 oUnitMaster 오브젝트 숫자를 기준으로 삼고(이는 oUnitA와 oUnitB의 부모임 즉 둘 다 셈) for문을 만들음
var a = -1;
var b = -1;
for(i=0; i<instance_number(oUnitMaster); i++;)
{
if(global.PlayerTurn = true)
{
if(a < ds_list_size(oUnitA)-1)
{
a++;
TypeCheck(oUnitA[a]);
ds_list_add(RoundOrder, oUnitA[a]);
if(global.TurnOver = true) global.PlayerTurn = false;
else break;
}
else global.PlayerTurn = false
}
else { ...}
}
a는 -1부터 시작하되 처음에 a가 1 증가해서 0부터 시작하는 거임
a값은 a팀과 b팀 사이에서 리스트에 차출된 사원 숫자를 공유하지 않도록 함
서포터만 9개 넣은 경우 리스트 사이즈보다 큰 숫자[9]를 호출해서 오류가 나는 경우도 막음
TypeCheck()함수는 대상에 접근해서 대상의 UnitType를 기반으로 global.TurnOver를 반환하는 간단한 기능임
지원가는 false고 나머지는 true를 반환함
그래서 마지막에 global.TurnOver가 true면 PlayerTurn이 넘어가고 아니면 유지되면서 oUnitA[0] 다음으로 oUnitA[1]이 RoundOrder에 등록되는 것임
턴이 넘어갔으면 oUnitA[0] 다음에 oUnitB[0]가 오겠고...
else에는 B쪽이 등록하는 내용임 여기는 턴을 넘길때 내용만 반대고 나머진 똑같음
그리고 행동으로 넘어가서 이 RoundOrder의 순서대로 행동을 실행하고....
턴 종료 판정이 나오면 oRoundManager의 user event 1을 불러옴
여기서 기존의 RoundOrder리스트를 파괴하고 user event 0을 불러옴
그리고 위의 내용은 user event 0에 집어넣는 것으로 두 번째 불러올 때는 리스트를 파괴하고 새로 만드는 방식을 반복하는 거임
또 승패 판정때도 이 RoundOrder 리스트를 파괴함...
문제가 있을수도 있는데 아무튼 oDeploy를 교체하고 나서 시험해볼 것임...