Files
HDRobotics/Assets/Scripts/Presenter/ProgramPresenter.cs

125 lines
3.5 KiB
C#
Raw Normal View History

2025-10-24 11:55:43 +09:00
using System;
using System.Threading.Tasks;
using UnityEngine;
2025-10-24 11:55:43 +09:00
using UnityEngine.XR.ARSubsystems;
public class ProgramPresenter
{
private ProgramModel model;
private IProgramView view;
private RobotController controlledRobot;
private string _programId;
2025-10-24 11:55:43 +09:00
private bool lastKnownMotorState = false;
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;
}
2025-10-24 11:55:43 +09:00
public async Task UpdateMotorStateAsync()
{
try
{
bool currentState = await model.GetRobotMotorStateAsync();
if (currentState != lastKnownMotorState)
{
controlledRobot.SetMotorState(currentState);
lastKnownMotorState = currentState;
}
}
catch (Exception e)
{
Debug.LogWarning($"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>: {e.Message}");
}
}
public void OnApplicationStart()
{
if (controlledRobot != null)
{
2025-10-24 11:55:43 +09:00
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>ϵǾ<CFB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
}
else
{
Debug.LogError("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>");
}
}
private async Task HandleCreateProgram(string programId)
{
if (await model.CreateNewProgram(programId))
{
2025-10-24 11:55:43 +09:00
view.DisplayProgram(programId);
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))
{
2025-10-24 11:55:43 +09:00
view.DisplayProgram(_programId);
view.HideProgramSelectPanel();
view.HideProgramList();
OnApplicationStart();
_programId = null;
}
}
private void HandleSaveProgram()
{
//model.SaveCurrentProgram();
}
private void HandleAddPoint()
{
//// <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> UI<55><49><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20>κ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>ǥ<EFBFBD><C7A5> <20>޾ƿ;<C6BF> <20><>
//// <20><><EFBFBD><EFBFBD><E2BCAD> <20><><EFBFBD>÷<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD><EFBFBD>
//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;
}
}