Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/LE_LevelEditor/Commands/LE_CmdDeleteObject.cs
2026-02-21 16:45:37 +08:00

114 lines
3.4 KiB
C#

using System.Collections.Generic;
using LE_LevelEditor.Core;
using LE_LevelEditor.Logic;
using LE_LevelEditor.UI;
using UnityEngine;
namespace LE_LevelEditor.Commands
{
public class LE_CmdDeleteObject : LE_CmdBase
{
private LE_GUI3dObject m_gui3d;
private LE_CmdObjectLink m_objectInstance = new LE_CmdObjectLink();
private LE_Object m_prefab;
private string m_objectResourcePath;
private Vector3 m_position;
private Quaternion m_rotation;
private Vector3 m_scale;
private bool m_isRigidbodySleepingStart;
private Color m_color;
private int m_variationIndex;
private int m_UID;
private Dictionary<string, int> m_snapPointLinks = new Dictionary<string, int>();
public LE_CmdDeleteObject(LE_GUI3dObject p_gui3d, LE_Object p_selectedObject)
{
m_gui3d = p_gui3d;
m_objectInstance.Obj = p_selectedObject;
m_prefab = Resources.Load<LE_Object>(p_selectedObject.name);
m_objectResourcePath = p_selectedObject.name;
m_UID = p_selectedObject.UID;
if (m_prefab == null)
{
Debug.LogWarning("LE_CmdDeleteObject: '" + p_selectedObject.name + "' is not a valid resource path! Command will fail on execution!");
}
}
public override long GetStoredBytes()
{
return 200 + m_objectResourcePath.Length;
}
public override bool Execute()
{
if (!base.Execute())
{
return false;
}
if (m_objectInstance.Obj == null)
{
Debug.LogError("LE_CmdDeleteObject: Execute: could not execute, m_objectInstance is null!");
return false;
}
if (m_gui3d == null)
{
Debug.LogError("LE_CmdDeleteObject: Execute: could not execute, m_gui3d is null!");
return false;
}
m_position = m_objectInstance.Obj.transform.position;
m_rotation = m_objectInstance.Obj.transform.rotation;
m_scale = m_objectInstance.Obj.transform.localScale;
m_isRigidbodySleepingStart = m_objectInstance.Obj.IsRigidbodySleepingStart;
m_color = m_objectInstance.Obj.ColorProperty;
m_variationIndex = m_objectInstance.Obj.VariationsDefaultIndex;
m_snapPointLinks.Clear();
List<KeyValuePair<string, int>> snapPointsToReactivate = m_gui3d.GetSnapPointsToReactivate(m_UID, m_objectInstance.Obj.ObjectSnapPoints.Length);
foreach (KeyValuePair<string, int> item in snapPointsToReactivate)
{
m_snapPointLinks.Add(item.Key, item.Value);
}
LE_LogicObjects.DeleteObject(m_gui3d, m_objectInstance.Obj);
return true;
}
public override bool Rollback()
{
if (!base.Rollback())
{
return false;
}
if (m_prefab == null)
{
Debug.LogError("LE_CmdDeleteObject: Rollback: could not rollback, m_prefab is null!");
return false;
}
if (m_gui3d == null)
{
Debug.LogError("LE_CmdDeleteObject: Rollback: could not rollback, m_gui3d is null!");
return false;
}
m_objectInstance.Obj = LE_LogicObjects.InstantiateObject(m_prefab, m_position, m_rotation, m_scale, m_objectResourcePath);
m_objectInstance.UID = m_UID;
m_objectInstance.Obj.IsRigidbodySleepingStart = m_isRigidbodySleepingStart;
m_objectInstance.Obj.DeactivateRigidbody();
LE_LogicObjects.ApplyColor(m_objectInstance.Obj, m_color);
LE_LogicObjects.ApplyVariation(m_objectInstance.Obj, m_variationIndex);
m_gui3d.SetSnapPointUIDsToObjUIDsAndApplyChanges(m_snapPointLinks);
LE_LogicObjects.AddSnappingScripts(m_gui3d, m_objectInstance.Obj);
LE_LogicObjects.SelectNewObjectAndNotifyListeners(m_gui3d, m_objectInstance.Obj);
return true;
}
}
}