1 /* $Id$ */
2 /***************************************************************************
3  *                   (C) Copyright 2003-2014 - Stendhal                    *
4  ***************************************************************************
5  ***************************************************************************
6  *                                                                         *
7  *   This program is free software; you can redistribute it and/or modify  *
8  *   it under the terms of the GNU General Public License as published by  *
9  *   the Free Software Foundation; either version 2 of the License, or     *
10  *   (at your option) any later version.                                   *
11  *                                                                         *
12  ***************************************************************************/
13 package games.stendhal.server.events;
14 
15 import games.stendhal.common.constants.Events;
16 import games.stendhal.common.constants.SoundID;
17 import games.stendhal.common.constants.SoundLayer;
18 import marauroa.common.game.Definition.DefinitionClass;
19 import marauroa.common.game.Definition.Type;
20 import marauroa.common.game.RPClass;
21 import marauroa.common.game.RPEvent;
22 
23 /**
24  * A sound.
25  *
26  * @author hendrik
27  */
28 public class SoundEvent extends RPEvent {
29 
30 	/**
31 	 * Creates the rpclass.
32 	 */
generateRPClass()33 	public static void generateRPClass() {
34 		final RPClass rpclass = new RPClass(Events.SOUND);
35 		rpclass.add(DefinitionClass.ATTRIBUTE, "sound", Type.STRING);
36 		rpclass.add(DefinitionClass.ATTRIBUTE, "sound_id", Type.STRING);
37 		rpclass.add(DefinitionClass.ATTRIBUTE, "radius", Type.INT);
38 		rpclass.add(DefinitionClass.ATTRIBUTE, "volume", Type.INT);
39 		rpclass.add(DefinitionClass.ATTRIBUTE, "layer", Type.BYTE);
40 	}
41 
42 	/**
43 	 * Creates a new sound event with an infinite range.
44 	 *
45 	 * @param sound
46 	 * 		Name of sound to play.
47 	 * @param layer
48 	 * 		Sound layer (e. g. ambient sound).
49 	 */
SoundEvent(final String sound, final SoundLayer layer)50 	public SoundEvent(final String sound, final SoundLayer layer) {
51 		super(Events.SOUND);
52 		put("sound", sound);
53 		put("layer", layer.ordinal());
54 	}
55 
56 	/**
57 	 * Creates a new sound event using an ID with an infinite range.
58 	 *
59 	 * @param id
60 	 * 		SoundID to send with event.
61 	 * @param layer
62 	 * 		Sound layer (e. g. ambient sound).
63 	 */
SoundEvent(final SoundID id, final SoundLayer layer)64 	public SoundEvent(final SoundID id, final SoundLayer layer) {
65 		super(Events.SOUND);
66 		put("sound_id", id.toString());
67 		put("layer", layer.ordinal());
68 	}
69 
70 	/**
71 	 * Creates a new sound event with a volume and infinite range.
72 	 *
73 	 * @param sound
74 	 * 		Name of sound to play.
75 	 * @param volume
76 	 * 		Volume level.
77 	 * @param layer
78 	 * 		Sound layer (e. g. ambient sound).
79 	 */
SoundEvent(final String sound, final int volume, final SoundLayer layer)80 	public SoundEvent(final String sound, final int volume, final SoundLayer layer) {
81 		this(sound, layer);
82 		put("volume", volume);
83 	}
84 
85 	/**
86 	 * Creates a new sound event using an ID with a volume and infinite range.
87 	 *
88 	 * @param id
89 	 * 		SoundID to send with event.
90 	 * @param volume
91 	 * 		Volume level.
92 	 * @param layer
93 	 * 		Sound layer (e. g. ambient sound).
94 	 */
SoundEvent(final SoundID id, final int volume, final SoundLayer layer)95 	public SoundEvent(final SoundID id, final int volume, final SoundLayer layer) {
96 		this(id, layer);
97 		put("volume", volume);
98 	}
99 
100 	/**
101 	 * Creates a new sound event with specified range and volume.
102 	 *
103 	 * @param sound
104 	 * 		Name of sound to play.
105 	 * @param radius
106 	 * 		Radius at which sound can be heard.
107 	 * @param volume
108 	 * 		Volume level.
109 	 * @param layer
110 	 * 		Sound layer (e. g. ambient sound).
111 	 */
SoundEvent(final String sound, final int radius, final int volume, final SoundLayer layer)112 	public SoundEvent(final String sound, final int radius, final int volume, final SoundLayer layer) {
113 		this(sound, volume, layer);
114 		put("radius", radius);
115 	}
116 
117 	/**
118 	 * Creates a new sound event using an ID with specified range and volume.
119 	 *
120 	 * @param id
121 	 * 		SoundID to send with event.
122 	 * @param radius
123 	 * 		Radius at which sound can be heard.
124 	 * @param volume
125 	 * 		Volume level.
126 	 * @param layer
127 	 * 		Sound layer (e. g. ambient sound).
128 	 */
SoundEvent(final SoundID id, final int radius, final int volume, final SoundLayer layer)129 	public SoundEvent(final SoundID id, final int radius, final int volume, final SoundLayer layer) {
130 		this(id, volume, layer);
131 		put("radius", radius);
132 	}
133 }
134