using UnityEngine;
using Firebase;
using [Link];
using [Link];
using TMPro;
using [Link];
public class Selection : MonoBehaviour
{
public GameObject selectedObject;
public GameObject textTmpObj;
public GameObject colorTextObj;
public GameObject prefabNameTextObj;
public GameObject idTextObj;
private int idCounter = 1;
private DatabaseReference databaseReference;
private Dictionary<GameObject, int> objectToId = new Dictionary<GameObject,
int>();
private List<SelectionData> savedItems = new List<SelectionData>();
[SerializeField]
private GameObject[] prefabs; // Array of prefabs for loading
private bool ctrlKeyHeld = false;
private Vector3 lastSavedPosition; // Store the last saved position
void Start()
{
[Link]().ContinueWith(task =>
{
var dependencyStatus = [Link];
if (dependencyStatus == [Link])
{
FirebaseApp app = [Link];
databaseReference = [Link];
LoadDataFromFirebase();
}
else
{
[Link]($"Could not resolve all Firebase dependencies:
{dependencyStatus}");
}
});
}
void Update()
{
ctrlKeyHeld = [Link]([Link]) ||
[Link]([Link]);
if ([Link](0))
{
Ray ray = [Link]([Link]);
RaycastHit hit;
if ([Link](ray, out hit, 1000))
{
Select([Link]);
}
}
if ([Link](1))
{
Deselect();
}
if (ctrlKeyHeld && [Link](KeyCode.S))
{
SaveDataToFirebase();
}
if (ctrlKeyHeld && [Link](KeyCode.L))
{
LoadDataFromFirebase();
}
if ([Link](KeyCode.K))
{
SaveSelectedObject();
}
if ([Link](KeyCode.L))
{
LoadSelectedObject();
}
}
public void SaveSelectedObject()
{
if (selectedObject != null)
{
if ()
{
objectToId[selectedObject] = idCounter;
idCounter++;
}
SaveDataToFirebase();
}
}
public void LoadSelectedObject()
{
if ([Link] > 0)
{
SelectionData lastSavedData = savedItems[[Link] - 1];
int prefabIndex = [Link];
if (prefabIndex >= 0 && prefabIndex < [Link])
{
GameObject loadedPrefab = prefabs[prefabIndex];
if (loadedPrefab != null)
{
GameObject loadedObject = Instantiate(loadedPrefab);
[Link] = lastSavedPosition;
Renderer objRenderer = [Link]<Renderer>();
if (objRenderer != null)
{
// Update the color of the loaded object
Color color;
if ([Link]("#" +
[Link], out color))
{
[Link] = color;
}
else
{
[Link]("Failed to parse color: " +
[Link]);
}
}
else
{
[Link]("Renderer not found on loaded object.");
}
[Link]("Loaded the last saved object.");
}
else
{
[Link]("Prefab not found at index: " + prefabIndex);
}
}
else
{
[Link]("Invalid prefab index: " + prefabIndex);
}
}
else
{
[Link]("No saved items to load.");
}
}
public void SaveDataToFirebase()
{
if (selectedObject != null)
{
Vector3 objectPosition = [Link];
lastSavedPosition = objectPosition;
int prefabIndex = GetPrefabIndex(selectedObject);
SelectionData data = new SelectionData
{
X = objectPosition.x,
Y = objectPosition.y,
Z = objectPosition.z,
Color = [Link]<Renderer>() != null
?
[Link]([Link]<Renderer>().[Link]
r)
: "N/A",
PrefabIndex = prefabIndex,
Id = objectToId[selectedObject]
};
string jsonData = [Link](data);
string uniqueKey = [Link]().Key;
[Link](uniqueKey).SetRawJsonValueAsync(jsonData);
[Link]("Saved To Database with Key: " + uniqueKey);
}
}
public void LoadDataFromFirebase()
{
[Link]().ContinueWith(task =>
{
if ([Link])
{
DataSnapshot snapshot = [Link];
[Link]();
foreach (var child in [Link])
{
string jsonData = [Link]();
SelectionData data =
[Link]<SelectionData>(jsonData);
[Link](data);
}
foreach (var data in savedItems)
{
int prefabIndex = [Link];
if (prefabIndex >= 0 && prefabIndex < [Link])
{
GameObject loadedPrefab = prefabs[prefabIndex];
if (loadedPrefab != null)
{
GameObject loadedObject = Instantiate(loadedPrefab);
[Link] = new Vector3(data.X,
data.Y, data.Z);
Renderer objRenderer =
[Link]<Renderer>();
if (objRenderer != null)
{
// Update the color of the loaded object
Color color;
if ([Link]("#" +
[Link], out color))
{
[Link] = color;
}
else
{
[Link]("Failed to parse color: " +
[Link]);
}
}
else
{
[Link]("Renderer not found on loaded
object.");
}
}
else
{
[Link]("Prefab not found at index: " +
prefabIndex);
}
}
else
{
[Link]("Invalid prefab index: " + prefabIndex);
}
}
[Link]("Loaded " + [Link] + " items from the
database.");
}
});
}
private int GetPrefabIndex(GameObject obj)
{
for (int i = 0; i < [Link]; i++)
{
if (prefabs[i] == obj)
{
return i;
}
}
return -1; // Default value if the prefab is not found
}
private void Select(GameObject obj)
{
if (obj == selectedObject) return;
if (selectedObject != null) Deselect();
Outline outline = [Link]<Outline>();
if (outline == null) [Link]<Outline>();
else [Link] = true;
selectedObject = obj;
if ([Link](obj))
{
[Link]<TextMeshProUGUI>().text = "ID: " +
objectToId[obj];
}
else
{
objectToId[obj] = idCounter;
[Link]<TextMeshProUGUI>().text = "ID: " + idCounter;
idCounter++;
}
Vector3 objectPosition = [Link];
[Link]<TextMeshProUGUI>().text = $"X:
{objectPosition.x:F2}, Y: {objectPosition.y:F2}, Z: {objectPosition.z:F2}";
Renderer objRenderer = [Link]<Renderer>();
if (objRenderer != null)
{
[Link]<TextMeshProUGUI>().text = "Color: " +
[Link]();
}
else
{
[Link]<TextMeshProUGUI>().text = "Color: N/A";
}
[Link]<TextMeshProUGUI>().text = "Prefab Name: " +
[Link];
}
private void Deselect()
{
Outline outline = [Link]<Outline>();
if (outline != null)
{
[Link] = false;
}
selectedObject = null;
[Link]<TextMeshProUGUI>().text = "";
[Link]<TextMeshProUGUI>().text = "";
[Link]<TextMeshProUGUI>().text = "";
[Link]<TextMeshProUGUI>().text = "";
}
[[Link]]
public class SelectionData
{
public float X;
public float Y;
public float Z;
public string Color;
public int PrefabIndex;
public int Id;
}
}