using System.Collections.Generic;
using System.Linq;
using System;
using UnityEngine;
///
/// ÇÁ·Î±×·¥ÀÇ jobÀ̸§, stepÁ¤º¸¸¦ °ü¸®Çϴ Ŭ·¡½º
///
public class RobotProgram
{
public string ProgramId { get; private set; } // jobÀ̸§
public List Steps { get; private set; } // stepÁ¤º¸µé
public RobotProgram(string programId, string rawTextContent)
{
this.ProgramId = programId;
this.Steps = new List();
ParseJobContent(rawTextContent);
}
///
/// GET ÀÀ´ä(rawText)À» ÆÄ½ÌÇÏ¿© Steps ¸®½ºÆ®¸¦ ä¿ò
///
private void ParseJobContent(string rawText)
{
string[] lines = rawText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
// S<¹øÈ£>·Î ½ÃÀÛÇϰí, [ÁÂÇ¥]¸¦ Æ÷ÇÔÇÏ´Â ¶óÀθ¸ ÆÄ½Ì
if (line.StartsWith("S") && line.Contains("["))
{
string coordString = ExtractCoordinates(line);
if (!string.IsNullOrEmpty(coordString))
{
Steps.Add(new RobotMoveStep(line, coordString));
}
}
}
Debug.Log($"ÇÁ·Î±×·¥ '{ProgramId}' ·Îµå ¿Ï·á. {Steps.Count}°³ÀÇ ½ºÅÜ ÆÄ½ÌµÊ.");
}
///
/// ÁÂÇ¥¸¸ ÃßÃâÇÏ´Â ÇÔ¼ö
///
///
///
private string ExtractCoordinates(string line)
{
int start = line.IndexOf('[');
int end = line.IndexOf(']');
if (start != -1 && end != -1)
{
return line.Substring(start + 1, end - start -1);
}
return string.Empty;
}
///
/// »õ Æ÷ÀÎÆ® ·ÎÄà ij½Ã¿¡ Ãß°¡
///
public void AddStep(RobotData data, int toolNum)
{
int newStepNum = (Steps.Count > 0) ? Steps.Last().StepNumber + 1 : 1;
string cmd = $"move P,spd=50%,accu=3,tool={toolNum}";
RobotPose newPose = new RobotPose(data);
string line = $"S{newStepNum} {cmd} {newPose.ToString()}";
Steps.Add(new RobotMoveStep(line, ExtractCoordinates(line)));
}
///
/// ±âÁ¸ Æ÷ÀÎÆ®ÀÇ Pose ·ÎÄà ij½Ã¿¡¼ ¼öÁ¤
///
public void UpdateStep(int index, RobotData data)
{
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"UpdateStep: À߸øµÈ À妽º {index}");
return;
}
Steps[index].UpdatePose(new RobotPose(data));
}
///
/// Æ÷ÀÎÆ®¸¦ ·ÎÄà ij½Ã¿¡¼ »èÁ¦Çϰí S<¹øÈ£> ÀçÁ¤·Ä
///
public void DeleteStep(int index)
{
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"DeleteStep: À߸øµÈ À妽º {index}");
return;
}
Steps.RemoveAt(index);
// ½ºÅÜ ¹øÈ£ ÀçÁ¤·Ä (S1, S2, S3...)
for (int i = 0; i < Steps.Count; i++)
{
// MoveCommand´Â ±×´ë·Î À¯Áö
Steps[i].UpdateStepNumber(i + 1);
}
}
///
/// Æ÷ÀÎÆ®¸¦ ·ÎÄà ij½Ã¿¡¼ ÀüºÎ »èÁ¦
///
public void ResetSteps()
{
for (int i = 0; i < Steps.Count; i++)
{
Steps.RemoveAt(i);
}
}
///
/// ƯÁ¤ À妽ºÀÇ Pose¸¦ RobotData·Î ¹Ýȯ
///
public RobotData GetStepPose(int index)
{
if (index < 0 || index >= Steps.Count)
{
Debug.LogError($"GetStepPose: À߸øµÈ À妽º {index}");
return new RobotData(); // ºó µ¥ÀÌÅÍ ¹Ýȯ
}
return Steps[index].Pose.ToRobotData();
}
///
/// ¸ðµç Pose¸¦ List·Î ¹Ýȯ
///
public List GetAllStepPoses()
{
return Steps.Select(step => step.Pose.ToRobotData()).ToList();
}
///
/// ¸ðµç Stepµé ¹Ýȯ
///
///
public List GetAllSteps()
{
return this.Steps;
}
}