-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.wlk
155 lines (112 loc) · 4.03 KB
/
example.wlk
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
class Persona {
const property edad
const property emociones = #{}
//Punto 1 ===================================================
method esAdolescente()
= self.edad().between(12, 19)
//punto 2 ====================================================
method nuevaEmocion(emocion){
emociones.add(emocion)
}
//punto 3 ====================================================
method estaPorExplotar()
= emociones.all({emocion => emocion.liberarse()})
method viviUnEvento(evento)
= evento.vivirEvento(self)
}
class Emocion {
var property intensidad
var property liberada = false
var property eventosExperimentados = 0
var property intensidadElevada = 120
method puedeLiberarse() = self.intensidadAlta() && !self.liberada()
method liberarse(evento) {
self.disminuirIntensidad(evento.impacto())
self.liberada(true)
}
method sumarEventoExperimentado() {
eventosExperimentados += 1
}
method disminuirIntensidad(numero) {
intensidad -= numero
}
method intensidadAlta() = self.intensidad() >= self.intensidadElevada()
}
object intensidad {//cambio la itensidad de toda persona
}
class Furia inherits Emocion {
const property listaDePalabrotas = []
method ListaDePalabrotas()
= listaDePalabrotas.any({palabrota => palabrota.size() > 7}) // verifico con
method getPrimerPalabrota()
= listaDePalabrotas.first() //obtengo el primer elemento
method olvidarPrimerPalabrota(){
self.olvidarPalabrotra(self.getPrimerPalabrota())
} // lo elimino
override method puedeLiberarse()
= super() && self.ListaDePalabrotas()
override method liberarse(evento){
super(evento)
self.olvidarPrimerPalabrota()
}
method aprenderPalabrota(palabrota){
listaDePalabrotas.add(palabrota)
}
method olvidarPalabrotra(palabrota) {
listaDePalabrotas.remove(palabrota)
}
}
class Alegria inherits Emocion {
override method puedeLiberarse() = super() && (self.eventosExperimentados() % 2)
override method liberarse(evento) {
if(!self.intensidadNegativa(evento.impacto()))
super(evento)
else
self.intensidad(-self.sacarIntensidad(evento.impacto()))
}
method intensidadNegativa(intensidadEv) = self.sacarIntensidad(intensidadEv) < 0
method sacarIntensidad(intensidadEv) = self.intensidad() - intensidadEv
}
class Tristeza inherits Emocion{
var property causa = "melancolia" // creo q valdria declaralo asi porq solo seria un caso posible
override method puedeLiberarse()
= super() && self.causa() != "melancolia"
override method liberarse(evento) {
super(evento)
self.causa(evento.descripcion())
}
}
class Desagrado inherits Emocion{
override method puedeLiberarse()
= self.eventosExperimentados() > self.intensidad() && super()
}
class Temor inherits Desagrado {
}
class Ansiedad inherits Emocion{
const property estres
const listaDeContrasPostEstres // ["quedarse pelado", "cansasio", "rendir mal"] por ejemplo
override method puedeLiberarse() = super() && self.sumarIntensidad() > 100
override method liberarse(evento) {
super(evento)
listaDeContrasPostEstres.clear()
}
method sumarIntensidad() = self.intensidad() + self.estres()
}
class Evento {
const property impacto
const property descripcion
method vivirEvento(persona) {
self.liberarEmociones(persona)
}
method liberarEmociones(persona) {
persona.emociones().forEach({emocion => emocion.sumarEventoExperimentado()})
self.emocionesQueSePuedenLiberar(persona).forEach({emocion => emocion.liberarse(self)})
}
method emocionesQueSePuedenLiberar(persona) = persona.emociones().filter({emocion => emocion.liberarse()})
}
class GrupoDePersonas {
const property personas = #{}
method vivirEventoJuntos(evento) {
personas.forEach({persona => persona.viviUnEvento(evento)})
}
}