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