105 lines
3.1 KiB
C#
105 lines
3.1 KiB
C#
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
public class ProgramPresenter
|
|
{
|
|
private ProgramModel model;
|
|
private IProgramView view;
|
|
private RobotController controlledRobot;
|
|
private string _programId;
|
|
|
|
public ProgramPresenter(ProgramModel model, IProgramView view)
|
|
{
|
|
this.model = model;
|
|
this.view = view;
|
|
|
|
this.view.OnCreateProgramClicked += async (id) => await HandleCreateProgram(id);
|
|
this.view.OnLoadProgramListRequested += HandleLoadProgramList;
|
|
this.view.OnProgramSelectedToLoad += HandleProgramSelected;
|
|
this.view.OnOpenProgramClicked += async () => await HandleOpenProgram();
|
|
this.view.OnSaveClicked += HandleSaveProgram;
|
|
this.view.OnAddPointClicked += HandleAddPoint;
|
|
}
|
|
|
|
public void RegisterControlledRobot(RobotController robot)
|
|
{
|
|
this.controlledRobot = robot;
|
|
}
|
|
|
|
public void OnApplicationStart()
|
|
{
|
|
if (controlledRobot != null)
|
|
{
|
|
Debug.Log("로봇 모터를 ON 상태로 설정합니다.");
|
|
controlledRobot.SetMotorState(true);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("제어할 로봇이 등록되지 않았습니다");
|
|
}
|
|
}
|
|
|
|
private async Task HandleCreateProgram(string programId)
|
|
{
|
|
if (await model.CreateNewProgram(programId))
|
|
{
|
|
view.DisplayProgram(model.CurrentProgram);
|
|
view.HideProgramSelectPanel();
|
|
OnApplicationStart();
|
|
}
|
|
else
|
|
{
|
|
view.ShowMessage($"Error: Program ID '{programId}.job' already exists or is invalid.");
|
|
}
|
|
}
|
|
|
|
private void HandleLoadProgramList()
|
|
{
|
|
var programIds = model.GetAllProgramIds();
|
|
view.ShowProgramList(programIds);
|
|
}
|
|
|
|
private void HandleProgramSelected(string programId)
|
|
{
|
|
_programId = programId;
|
|
}
|
|
|
|
private async Task HandleOpenProgram()
|
|
{
|
|
if(_programId != null && await model.LoadProgram(_programId))
|
|
{
|
|
view.DisplayProgram(model.CurrentProgram);
|
|
view.HideProgramSelectPanel();
|
|
view.HideProgramList();
|
|
|
|
OnApplicationStart();
|
|
|
|
_programId = null;
|
|
}
|
|
}
|
|
|
|
private void HandleSaveProgram()
|
|
{
|
|
//model.SaveCurrentProgram();
|
|
}
|
|
|
|
private void HandleAddPoint()
|
|
{
|
|
//// 실제로는 UI상의 좌표나 로봇 엔드포인트 좌표를 받아와야 함
|
|
//// 여기서는 예시로 랜덤 좌표를 사용
|
|
//Vector3 newPoint = new Vector3(Random.Range(-1f, 1f), Random.Range(0f, 1f), Random.Range(-1f, 1f));
|
|
|
|
//model.AddPointToCurrentProgram(newPoint);
|
|
//view.DisplayProgram(model.CurrentProgram);
|
|
}
|
|
|
|
private void Destroy()
|
|
{
|
|
this.view.OnCreateProgramClicked -= async (id) => await HandleCreateProgram(id);
|
|
this.view.OnLoadProgramListRequested -= HandleLoadProgramList;
|
|
this.view.OnProgramSelectedToLoad -= HandleProgramSelected;
|
|
this.view.OnOpenProgramClicked -= async () => await HandleOpenProgram();
|
|
this.view.OnSaveClicked -= HandleSaveProgram;
|
|
this.view.OnAddPointClicked -= HandleAddPoint;
|
|
}
|
|
} |