fix(rosto): parado mais humano; tonto com espirais e bocejo com a mão
Parado ele vivia escondendo o rosto: a IA local (Qwen 0.6B) reagia a cada som ou "sozinho" a cada 20-60 s e repetia 'esconder' apesar do "varie". - IA local: cada evento só oferece gestos que combinam (barulho: susto ou olhar; movimento: olhar e acenar), os dois últimos ficam fora do enum, no máximo a cada 45 s, não interrompe atividade e, com o modo vida ligado, não reage a "sozinho". - Sem ninguém olhando (sem movimento/PIR há 3 min) nada de gesto "para alguém" (acenar, tímido, esconder...): ele vive a vida dele e começa atividades com mais frequência. - Gestos soltos no celular: quase sempre sutis (olhar de lado, piscar devagar), gesto grande raro e nunca repetido em seguida. - Olhar em repouso com fixações e sacadas em vez do vaivém contínuo. - Tonto: espirais girando no lugar dos olhos (todos os rostos, inclusive Matriz) e boca de "ó". Bocejo: mão na frente da boca com tapinhas e Zzz subindo. As mãos agora aparecem também quando o gesto vem sozinho. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -64,9 +64,10 @@ ATOS = {
|
||||
('musica', 1, 'Cantou para passar o tempo'), ('bocejar', 2, 'Bocejou de tédio'),
|
||||
('confuso', 1, 'Ficou confuso com alguma coisa')],
|
||||
'carente': [('triste', 2, 'Sentiu falta de alguém'), ('olhar_baixo', 2, 'Ficou cabisbaixo'),
|
||||
('esconder', 1, 'Escondeu o rosto')],
|
||||
('pensar', 1, 'Ficou pensando em alguém')],
|
||||
'carente_perto': [('acenar', 3, 'Acenou chamando atenção'), ('espiar', 2, 'Espiou quem está aí'),
|
||||
('coracao', 2, 'Pediu carinho'), ('surpreso', 1, 'Fez cara de "oi!"'), ('timido', 1, 'Ficou tímido')],
|
||||
('coracao', 2, 'Pediu carinho'), ('surpreso', 1, 'Fez cara de "oi!"'), ('timido', 1, 'Ficou tímido'),
|
||||
('esconder', 1, 'Escondeu o rosto, envergonhado')],
|
||||
'triste': [('triste', 3, 'Ficou tristinho'), ('olhar_baixo', 2, 'Olhou para baixo'), ('pensar', 1, 'Ficou pensativo')],
|
||||
'bravo': [('bravo', 3, 'Ficou emburrado'), ('olhar_baixo', 2, 'Bufou de mau humor'), ('confuso', 1, 'Resmungou sozinho')],
|
||||
'cansado': [('bocejar', 3, 'Bocejou'), ('piscar2', 1, 'Piscou devagar'), ('olhar_baixo', 2, 'Cochilou de olho aberto'),
|
||||
@@ -78,6 +79,8 @@ ATOS = {
|
||||
# respeitado (som, movimento e PIR não acordam) até DESCANSADO; alegria caindo: o rosto vai ficando
|
||||
# bravo (zanga); diversão < TEDIO: vai fazer uma atividade por alguns minutos.
|
||||
COCHILO, SONO, DESCANSADO, TEDIO = 40, 20, 95, 45
|
||||
SOZINHO = 3 * 60 # s sem ninguém por perto: ele vive a vida dele (mais atividades, nada de gesto "para alguém")
|
||||
PARA_ALGUEM = {'acenar', 'coracao', 'piscadinha', 'timido', 'esconder', 'espiar', 'surpreso'}
|
||||
ATIVAS = ['bola', 'malhar', 'corda', 'skate', 'dancar', 'pipa'] # gastam energia
|
||||
CALMAS = ['ler', 'cafe', 'meditar', 'telescopio', 'pescar', 'computador', 'regar'] # quase não gastam
|
||||
CRIATIVAS = ['pintar', 'violao', 'cantar', 'cozinhar', 'bolhas', 'videogame']
|
||||
@@ -133,6 +136,7 @@ class Vida:
|
||||
self.atividade_em = 0.0 # quando começou a última atividade
|
||||
self.ultima_atividade = None
|
||||
self.zanga_enviada = None
|
||||
self.visto_em = time.time() # última vez que alguém esteve por perto
|
||||
self.bloqueado = lambda: False # E-Stop ou modo presença com ninguém em casa
|
||||
self.pode_gemini = lambda: bool(os.environ.get('GEMINI_API_KEY'))
|
||||
self.madrugada = self.noite_padrao # o main troca pelo horário dos ajustes
|
||||
@@ -460,6 +464,12 @@ class Vida:
|
||||
# entediado: vai fazer alguma coisa por alguns minutos (pode ser interrompido)
|
||||
if dia and folga and n['diversao'] < TEDIO and self.rng.random() < 0.75:
|
||||
return self.comecar_atividade(agora, self.escolher_atividade(), self.rng.uniform(120, 300))
|
||||
# ninguém olhando há um tempo: vai cuidar da vida dele (ler, pintar, música...)
|
||||
if perto:
|
||||
self.visto_em = agora
|
||||
sozinho = agora - self.visto_em > SOZINHO
|
||||
if dia and folga and sozinho and self.rng.random() < 0.4:
|
||||
return self.comecar_atividade(agora, self.escolher_atividade(), self.rng.uniform(60, 180))
|
||||
# bem: de vez em quando, uma atividade curtinha por vontade própria
|
||||
if dia and folga and humor in ('feliz', 'tranquilo') and self.rng.random() < 0.1:
|
||||
return self.comecar_atividade(agora, self.escolher_atividade(), self.rng.uniform(40, 90))
|
||||
@@ -474,6 +484,8 @@ class Vida:
|
||||
n['diversao'] = _limitar(n['diversao'] + 8)
|
||||
return 'reacao'
|
||||
lista = ATOS['carente_perto'] if humor == 'carente' and perto else ATOS.get(humor, ATOS['tranquilo'])
|
||||
if sozinho: # sem plateia: nada de acenar ou ficar tímido
|
||||
lista = [a for a in lista if a[0] not in PARA_ALGUEM] or ATOS['tranquilo'][:3]
|
||||
gesto, texto = self.escolher(lista)
|
||||
self.enfileirar(gesto)
|
||||
if humor == 'entediado':
|
||||
|
||||
Reference in New Issue
Block a user