-
Notifications
You must be signed in to change notification settings - Fork 0
/
BlobSpawner.cs
119 lines (103 loc) · 4.04 KB
/
BlobSpawner.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using UnityEngine;
public class BlobSpawner : MonoBehaviour
{
public GameObject blobPrefab;
public List<BlobPersonality> blobPersonalities = new List<BlobPersonality>();
public List<BlobBehavior> blobBehaviors = new List<BlobBehavior>();
private List<GameObject> spawnedBlobs = new List<GameObject>(); // Lista para manter referência dos blobs instanciados
float y = 4.37f;
float[] zs = new float[] { -15.14195f, -13.14195f, -10.12287f };
float[] xs = new float[] { 7.73567f, 9.73567f, 11.73567f, 13.73567f, 15.73567f };
void Start()
{
// Inicia a coroutine
StartCoroutine(SaveBlobBehaviorsToCSVPeriodically());
GenerateBlobs(); // Chama a função de geração na inicialização
}
void GenerateBlobs()
{
foreach (float z in zs)
{
foreach (float x in xs)
{
GameObject blobInstance = Instantiate(blobPrefab, new Vector3(x, y, z), Quaternion.Euler(10, 90, 0));
BlobPersonality personality = blobInstance.GetComponent<BlobPersonality>();
BlobBehavior behavior = blobInstance.GetComponent<BlobBehavior>();
personality.generate();
behavior.Start();
if (personality != null)
{
blobPersonalities.Add(personality);
blobBehaviors.Add(behavior);
}
spawnedBlobs.Add(blobInstance); // Adiciona a instância à lista de blobs instanciados
}
}
}
IEnumerator SaveBlobBehaviorsToCSVPeriodically()
{
while (true)
{
SaveBlobBehaviorsToCSV();
// daysCount++;
//if (daysCount == 8){
// daysCount = 0;
// RegenerateBlobs();
yield return new WaitForSeconds(3); // Espera por 3 segundos
}
}
// Função modificada para criar e salvar um CSV
public void SaveBlobBehaviorsToCSV()
{
StringBuilder sb = new StringBuilder();
// Define o caminho absoluto para a pasta onde as imagens e o CSV serão salvos
string folderPath = @"C:\Users\jader\Desktop\estudos\visage-track\vt-iamodel\ambientInfo";
// Verifica e cria a pasta se ela não existir
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
// Especifica o caminho completo e o nome do arquivo onde o CSV será salvo
string filePath = Path.Combine(folderPath, "BlobBehaviors.csv");
// Verifica se o arquivo já existe para adicionar o cabeçalho apenas se for um novo arquivo
if (!File.Exists(filePath))
{
// Adiciona o cabeçalho do CSV apenas uma vez
sb.AppendLine("FileName;Blob Name;Estado;Dias Passados;Interest;Laziness;Commitment");
}
int i = 0;
string filename = "";
// Presume-se que behavior.CaptureScreenshot() retorne o nome do arquivo da imagem
foreach (BlobBehavior behavior in blobBehaviors)
{
if (i == 0){
i++;
filename = behavior.CaptureScreenshot();
Debug.Log($"Imagem em em: {filename}");
}
// Adiciona uma linha para cada BlobBehavior
sb.AppendLine($"{filename};{behavior.blobName};{behavior.state};{behavior.daysCount};{behavior.interest};{behavior.laziness};{behavior.commitment}");
}
i = 0;
// Anexa a string CSV ao arquivo, criando-o se não existir
File.AppendAllText(filePath, sb.ToString());
Debug.Log($"CSV anexado em: {filePath}");
}
// Função para deletar e regenerar blobs
public void RegenerateBlobs()
{
// Deleta os blobs existentes
foreach (GameObject blob in spawnedBlobs)
{
Destroy(blob);
}
spawnedBlobs.Clear(); // Limpa a lista de referências
blobPersonalities.Clear(); // Limpa a lista de personalidades
blobBehaviors.Clear(); // Limpa a lista de comportamentos
GenerateBlobs(); // Gera novos blobs
}
}