pfa 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,212 @@
1
+ ---
2
+ # Données absolues du PFA (FPA Absolute Data)
3
+
4
+ times:
5
+ zero:
6
+ description: Temps zéro pris en référence pour rectifier toutes les valeurs.
7
+ type: time
8
+ printed: false
9
+ required: true
10
+
11
+ end_time:
12
+ description: Temps de fin du film (en général au début du générique de fin)
13
+ type: time
14
+ printed: false
15
+ required: true
16
+
17
+ # Exemple des temps pour un film de 120 minutes
18
+ # 1/4 = 30 minutes
19
+ # 1/24 = 5 minutes
20
+ nodes:
21
+ # --- EXPOSITION ---
22
+ exposition:
23
+ printed: true
24
+ required: true
25
+ id: 'EX'
26
+ hname: 'EXPOSITION'
27
+ type: part
28
+ abs_start: 0
29
+ abs_duration: 1/4 # p.e. 30 minutes
30
+ items: ['prelude', 'incident_perturbateur', 'incident_declencheur', 'zone_de_refus', 'pivot1']
31
+ preambule:
32
+ printed: true
33
+ drawn: false # pas sur le PFA
34
+ required: false
35
+ type: sequence
36
+ id: "PR"
37
+ hname: "Préambule"
38
+ description: "Introduction du film, souvent la présentation du personnage et de son contexte de vie."
39
+ abs_start: 0
40
+ abs_duration: 1/24 # p.e. 5 mn => fin à 5 mn
41
+ incident_perturbateur:
42
+ printed: true
43
+ drawn: true # sur le PFA
44
+ required: false
45
+ type: noeud
46
+ id: "IP"
47
+ hname: "Incident perturbateur"
48
+ abs_start: 1/24 # p.e. 5 mn
49
+ abs_duration: 1/24 # p.e. 5 mn => fin à 10 mn
50
+ incident_declencheur:
51
+ printed: true
52
+ drawn: true # sur le PFA
53
+ required: true
54
+ type: noeud
55
+ id: "ID"
56
+ hname: "Incident déclencheur"
57
+ description: "Moment qui déclenche l'histoire, qui permet de définir l'objectif ou la QDF (Question Dramatique Fondamentale)."
58
+ abs_start: 2/24 # p.e. 10 mn
59
+ abs_duration: 1/24 # p.e. 5 mn => fin à 15 mn
60
+ zone_de_refus:
61
+ printed: true
62
+ drawn: false # pas sur le PFA
63
+ required: false
64
+ type: sequence
65
+ id: "ZR"
66
+ hname: "Zone de refus"
67
+ description: "Moment de l'histoire où le personnage refuse son objectif (directement ou indirectement, consciemment ou inconsciemment)."
68
+ abs_start: 3/24 # p.e. 15 mn
69
+ abs_duration: 2/24 # p.e. 10 mn => fin à 25 mn
70
+ pivot1:
71
+ printed: true
72
+ drawn: true # sur le PFA
73
+ required: true
74
+ type: noeud
75
+ id: "P1"
76
+ hname: "Premier pivot"
77
+ abs_start: 1/4 - 1/24 # p.e. 30 mn - 5 mn = 25 mn
78
+ abs_duration: 1/24 # p.e. 5 mn => fin à 30 mn
79
+ description: "Moment de l'histoire où le personnage accepte son objectif, ce qui fait basculer le récit dans le développement."
80
+
81
+ # --- DÉVELOPPEMENT PARTIE 1 ---
82
+ developpement_part1:
83
+ printed: true
84
+ drawn: true # sur le PFA
85
+ type: part
86
+ id: 'D1'
87
+ hname: 'DÉV. PART I'
88
+ abs_start: 1/4
89
+ abs_duration: 1/4
90
+ items: ['premiere_action', 'premier_tiers', 'cle_de_voute']
91
+ action_1_part1:
92
+ printed: false
93
+ drawn: false # pas sur le PFA
94
+ required: false
95
+ type: noeud
96
+ id: "A1"
97
+ hname: "Première action"
98
+ description: "La toute première action entreprise par le protagoniste pour atteindre son objectif."
99
+ abs_start: 1/4
100
+ abs_duration: null
101
+ premier_tiers:
102
+ printed: true
103
+ drawn: true # sur le PFA
104
+ required: false
105
+ type: noeud
106
+ id: "T1"
107
+ hname: "Premier tiers"
108
+ description: "Souvent, à un tiers du film, il se passe quelque chose qui résonnera avec le 2 tiers, et/ou qui découpage le film en trois parties."
109
+ abs_start: 1/3
110
+ abs_duration: null
111
+ cle_de_voute:
112
+ printed: true
113
+ drawn: true # sur le PFA
114
+ required: false
115
+ type: noeud
116
+ id: 'CV'
117
+ hname: "Clé de voûte" # insécable pour ne pas être coupé là à l'affichage dans le graphique
118
+ description: "Scène faisant basculer l'histoire vers un autre pan, découpant le film en deux parties distinctes."
119
+ abs_start: 1/2 - 1/48 # p.e. 60 mn - 2,5 mn
120
+ abs_duration: 1/24 # p.e. 5 mn
121
+
122
+ # --- DÉVELOPPEMENT PARTIE 2 ---
123
+ developpement_part2:
124
+ printed: true
125
+ drawn: true # sur le PFA
126
+ type: part
127
+ id: 'D2'
128
+ hname: 'DÉV. PART II'
129
+ abs_start: 1/2
130
+ abs_duration: 1/4
131
+ items: ['premiere_action_dev2', 'deuxieme_tiers', 'crise', 'pivot2']
132
+ action_1_part2:
133
+ printed: false
134
+ drawn: false # pas sur le PFA
135
+ required: false
136
+ type: noeud
137
+ id: "A2"
138
+ hname: "Première action de 2e partie"
139
+ description: "Pendant de la première action du développement, après la clé de voûte."
140
+ abs_start: 1/2 + 1/48 # p.e. 60 + 2,5 mn = 62,5 mn
141
+ abs_duration: null
142
+ deuxieme_tiers:
143
+ printed: true
144
+ drawn: true # sur le PFA
145
+ required: false
146
+ type: noeud
147
+ id: "T2"
148
+ hname: "Deuxième tiers"
149
+ description: "Deuxième temps de la découpe du film en 3 parties et/ou scène en résonance avec la scène à 1/3."
150
+ abs_start: 2/3
151
+ abs_duration: null
152
+ crise:
153
+ printed: true
154
+ drawn: true # sur le PFA
155
+ required: false
156
+ type: noeud
157
+ id: "CR"
158
+ hname: "Crise"
159
+ description: "Moment du film où tout semble définitivement perdu pour le protagoniste. Il ne semble ne plus jamais pouvoir atteindre son objectif."
160
+ abs_start: 3/4 - 2/24 # p.e. 90 mn - 10 mn = 80 mn
161
+ abs_duration: 1/24
162
+ pivot2:
163
+ printed: true
164
+ drawn: true # sur le PFA
165
+ required: true
166
+ type: noeud
167
+ id: "P2"
168
+ hname: "Second Pivot"
169
+ description: "Moment de l'histoire qui la fait basculer dans le dénouement (souvent la sortie de crise)."
170
+ abs_start: 3/4 - 1/24
171
+ abs_duration: 1/24
172
+
173
+ # --- DÉNOUEMENT ---
174
+ denouement:
175
+ printed: true
176
+ drawn: true # sur le PFA
177
+ type: part
178
+ id: 'DE' # IMPÉRATIF
179
+ hname: 'DÉNOUEMENT'
180
+ abs_start: 3/4
181
+ abs_duration: 1/4
182
+ items: ['premiere_action_den', 'climax', 'desinence']
183
+ action_1_denouement:
184
+ printed: false
185
+ drawn: false # pas sur le PFA
186
+ required: false
187
+ type: noeud
188
+ id: "A3"
189
+ hname: "Première action de dénouement"
190
+ description: "Première action entrepris par le protagoniste, volontairement ou involontairement, pour se rendre au climax."
191
+ abs_start: 3/4
192
+ abs_duration: null
193
+ climax:
194
+ printed: true
195
+ drawn: true # sur le PFA
196
+ required: true
197
+ type: noeud
198
+ id: "CX"
199
+ hname: "Climax"
200
+ description: "Scène d'opposition frontale entre le protagoniste et les forces antagonistes. Donne ou permet de donnée la RDF (Réponse Dramatique Fondamentale)."
201
+ abs_start: 1 - 3/24 # p.e. 120 mn - 15 mn = 105 mn
202
+ abs_duration: 2/24 # p.e. 10 mn => fin à 115 mn
203
+ desinence:
204
+ printed: true
205
+ drawn: false # pas sur le PFA
206
+ required: false
207
+ type: sequence
208
+ id: "DS"
209
+ hname: "Désinence"
210
+ description: "Terminaison extrême du film, après que le climax a été joué."
211
+ abs_start: 1 - 1/24 # p.e. 120 mn - 5 mn = 115 mn
212
+ abs_duration: 1/24 # p.e. 5mn
@@ -0,0 +1,107 @@
1
+ ---
2
+ # Pour générer une de ces erreurs, utiliser :
3
+ # raise PFAFatalError.new(<code>[, <{template valeurs}>])
4
+
5
+ # --- Méthodes générales
6
+
7
+ 50: >
8
+ La valeur %{value} devrait être un Time…
9
+ 51: >
10
+ La valeur %{value} devrait être un nombre de secondes…
11
+ 52: > # valeur incorrecte pour estimer un temps
12
+ La valeur de temps %{value} est incorrecte.
13
+ Les formats pour les temps valides sont :
14
+ - un nombre de secondes 126
15
+ - un Time Time.at(3600+56)
16
+ - une horloge "virgule" "1,46,12"
17
+ - une horloge "plus" "1+46+12"
18
+ - une horloge normale "0:12:45"
19
+ 53: > # valeur incorrecte pour initialiser un NTime
20
+ La valeur %{value} est incorrecte pour initialiser un \PFA::NTime
21
+ Il faut fournir au choix :
22
+ - un nombre de secondes ([Integer|Float])
23
+ - un temps ([Time])
24
+ - une horloge valide ([String])
25
+ - une instance NTime ([PFA::NTime])
26
+ La valeur fournie est de classe %{classe}.
27
+
28
+
29
+ # --- Les données du PFA ---
30
+ 100: >
31
+ La clé %{key} est inconnue des données du PFA…
32
+ 101: |
33
+ Il faut définir les dimensions à utiliser en appelant la méthode
34
+ build avec une table contenant au moins :as dont la valeur est
35
+ une des valeurs contenues dans la constante DIMS_CONSTANTS_PER_THING
36
+ du fichier any_builder.rb ou une table définissant les valeurs
37
+ :pfa_width, :pfa_height, :pfa_left_margin et :pfa_right_margin
38
+
39
+ Par exemple :
40
+
41
+ pfa.build(**{as: real_book})
42
+
43
+ 200: >
44
+ Le zéro doit être défini.
45
+
46
+ Utiliser pfa.add(:zero, 'H+M+S')
47
+ 201: >
48
+ Le temps réel de fin doit être défini.
49
+
50
+ Utiliser pfa.add(:end_time, 'H+M+S')
51
+ 202: >
52
+ L'incident déclencheur doit être défini.
53
+
54
+ Utiliser pfa.add(:incident_declencheur, {t:'h,m,s', d:"<description>"[, duree: <secondes>]})
55
+ 203: >
56
+ Le premier pivot doit être défini.
57
+
58
+ Utiliser pfa.add(:pivot1, {t:'h,m,s', d:"<description>"[, duree: <secondes>]})
59
+ 204: >
60
+ La première partie de développement doit être définie.
61
+
62
+ Utiliser pfa.add(:developpement_part1, {t:'h,m,s', d:"<description>"})
63
+ 205: >
64
+ Le second pivot doit être défini.
65
+
66
+ Utiliser pfa.add(:pivot2, {t:'h,m,s', d:"<description>"[, duree: <secondes>]})
67
+ 206: >
68
+ Le dénouement doit être défini.
69
+
70
+ Utiliser pfa.add(:denouement, {t:'h,m,s', d:"<description>"})
71
+ 207: >
72
+ Le climax doit être défini.
73
+
74
+ Utiliser pfa.add(:climax, {t:'h,m,s', d:"<description>"[, duree: <secondes>]})
75
+ 208: >
76
+ La seconde moitié de développement doit être définie.
77
+
78
+ Utiliser pfa.add(:developpement_part2, {t:'h,m,s', d:"<description>"})
79
+ 209: >
80
+ L'exposition du film doit être définie.
81
+
82
+ Utiliser pfa.add(:exposition, {t:'<horloge>', d:'<description>'})
83
+
84
+ 219: >
85
+ La propriété :%{key} est mal définie. Ça devrait être une table
86
+ contenant au minimum :t (ou :time) et :d (ou :description). Or,
87
+ c'est une instance de type %{classe}.
88
+ 220: >
89
+ Les temps sont mal réglés.
90
+ Le temps de :%{key_before} (%{h_before}) devrait être avant le temps de
91
+ :%{key_after} (%{h_after})…
92
+ 221: >
93
+ La table de donnée pour le noeud :%{noeud} doit définir le temps
94
+ (avec la clé :t ou :time).
95
+ 222: >
96
+ La table de donnée pour le noeud :%{noeud} doit définir la description
97
+ humaine du noeud, à l'aide des clés :d ou :description.
98
+
99
+ # --- Image (building) ---
100
+
101
+ 5000: >
102
+ L'image '%{path}' n'a pas pu être produite.
103
+ (pour une raison malheureusement inconnue de nos services…)
104
+
105
+ 5001: >
106
+ Une erreur s'est produite avec la commande `convert' :
107
+ %{error}.
@@ -0,0 +1,25 @@
1
+ #
2
+ # Singleton AbsolutePFA
3
+ # ---------------------
4
+ #
5
+ #
6
+ # @note
7
+ #
8
+ # Les DATA absolues du paradigme sont définies dans le fichier
9
+ # PFA_ABSOLUTE_DATA.yaml dans le dossier assets/<LANG>
10
+ #
11
+ module PFA
12
+ class AbsolutePFAClass
13
+ include Singleton
14
+
15
+ # @return Data absolues du Paradigme de Field Augmenté
16
+ #
17
+ def data
18
+ @data ||= YAML.load_file(ABSOLUTE_DATA_PATH, **{symbolize_names:true})
19
+ end
20
+
21
+ end #/ AbsolutePFAClass
22
+
23
+ AbsolutePFA = AbsolutePFAClass.instance
24
+
25
+ end #/ module PFA
@@ -0,0 +1,28 @@
1
+ module PFA
2
+ class RelativePFA
3
+ class AnyBuilder
4
+
5
+ #
6
+ # Les nœuds minimums pour pouvoir construire un PFA
7
+ #
8
+ REQUIRED_NODES_FOR_BUILDING = [
9
+ :exposition,
10
+ :incident_declencheur,
11
+ :pivot1,
12
+ :developpement_part1,
13
+ :developpement_part2,
14
+ :pivot2,
15
+ :denouement,
16
+ :climax,
17
+ ]
18
+
19
+ # Instance \PFA::RelativePFA du paradigme de Field augmenté
20
+ attr_reader :pfa
21
+
22
+ def initialize(pfa)
23
+ @pfa = pfa
24
+ end
25
+
26
+ end #/class AnyBuilder
27
+ end #/class RelativePFA
28
+ end #/module PFA
@@ -0,0 +1,24 @@
1
+ module PFA
2
+
3
+ #
4
+ # La langue, pour le moment fixe
5
+ #
6
+ LANG = 'fr'
7
+
8
+ #
9
+ # Chemin d'accès au dossier ASSETS
10
+ #
11
+ ASSETS_FOLDER = File.absolute_path(File.join('.','lib','assets'))
12
+
13
+ #
14
+ # Chemin d'accès au dossier de LANGUE dans les ASSETS
15
+ #
16
+ ASSETS_LANG_FOLDER = File.join(ASSETS_FOLDER, LANG)
17
+
18
+ #
19
+ # Chemin d'accès au fichier définissant les données absolues du
20
+ # Paradigme de Field Augmenté
21
+ #
22
+ ABSOLUTE_DATA_PATH = File.join(ASSETS_LANG_FOLDER,'PFA_ABSOLUTE_DATA.yaml')
23
+
24
+ end #/ module PFA
@@ -0,0 +1,14 @@
1
+ module PFA
2
+
3
+ class PFAFatalError < StandardError
4
+ def initialize(err_num, params = nil)
5
+ err_msg = ERRORS[err_num]
6
+ err_msg = err_msg % params unless params.nil?
7
+ super(err_msg)
8
+ end
9
+ end
10
+ class PFAError < StandardError; end
11
+
12
+ ERRORS = YAML.load_file(File.join(ASSETS_LANG_FOLDER,'errors.yaml'))
13
+
14
+ end #/module PFA