Bonjour
Pour mon projet (<pub>un clone de Eye of the Beholder II => www.mimicprod.net</pub>), je dois mettre en place un système de script pour gérer les évènements dans le jeu.
Je définis une interface IScriptAction suivante :
La méthode Run() permet d'exécuter le script en lui même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 /// <summary> /// Abstract base class for event script actions /// </summary> public interface IScriptAction { /// <summary> /// Run the script /// </summary> /// <returns>True on success</returns> bool Run(); #region IO /// <summary> /// Loads a party /// </summary> /// <param name="filename">Xml data</param> /// <returns>True if team successfuly loaded, otherwise false</returns> bool Load(XmlNode xml); /// <summary> /// Saves the party /// </summary> /// <param name="filename">XmlWriter</param> /// <returns></returns> bool Save(XmlWriter writer); #endregion #region Properties /// <summary> /// Action's name /// </summary> string Name { get; } #endregion
La propriété Name est le nom de l'action (par exemple "Teleport") et est unique au sein de toutes les actions possibles.
Les méthodes Save() et Load() permette respectivement de sauvegarder et de charger les informations du script.
Voici un exemple pour l'action Teleport qui téléporte le joueur dans un autre endroit du jeu :
Voici un exemple de sa définition en XML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 /// <summary> /// Teleport the team /// </summary> public class ScriptTeleport : IScriptAction { /// <summary> /// /// </summary> /// <returns></returns> public bool Run() { return false; } #region IO /// <summary> /// Loads a party /// </summary> /// <param name="filename">Xml data</param> /// <returns>True if team successfuly loaded, otherwise false</returns> public bool Load(XmlNode xml) { return true; } /// <summary> /// Saves the party /// </summary> /// <param name="filename">XmlWriter</param> /// <returns></returns> public bool Save(XmlWriter writer) { return true; } #endregion #region Properties /// <summary> /// Target destination /// </summary> public DungeonLocation Target { get; set; } /// <summary> /// Change direction /// </summary> public bool ChangeDirection { get; set; } /// <summary> /// Action's name /// </summary> public string Name { get { return "Teleport"; } } #endregion }
Ma question est : est-il possible de faire l'association de manière "propre" et si possible automatique entre ma classe TeleportAction et sa définition XML ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <action type="Teleport"> <target maze="test" x="10" y="5" direction="North" position="NorthEast" /> <changedirection value="false" /> </action>
Actuellement je fais ainsi :
- Je lis la balise "action", je sais donc que j'ai affaire à un action.
- Je lis le champ type et je fais un bon gros if(type == "")... else if(type == "")... else if(type =="")
Ce n'est pas ce qu'il y a de mieux...
Merci
Partager