1 /* 2 * Copyright (c) 2017-2018 sel-project 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in all 12 * copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 * SOFTWARE. 21 * 22 */ 23 /** 24 * Copyright: 2017-2018 sel-project 25 * License: MIT 26 * Authors: Kripth 27 * Source: $(HTTP github.com/sel-project/selery/source/selery/event/world/entity.d, selery/event/world/entity.d) 28 */ 29 module selery.event.world.entity; 30 31 import selery.entity.entity : Entity; 32 import selery.entity.living : Living; 33 import selery.event.event : Cancellable; 34 import selery.event.world.damage : EntityDamageEvent; 35 import selery.event.world.world; 36 import selery.lang : Translation; 37 import selery.world.world : World; 38 39 interface EntityEvent : WorldEvent { 40 41 public pure nothrow @property @safe @nogc Entity entity(); 42 43 public static mixin template Implementation() { 44 45 private Entity n_entity; 46 47 public final override pure nothrow @property @safe @nogc Entity entity() { 48 return this.n_entity; 49 } 50 51 // implements WorldEvent 52 public final override pure nothrow @property @safe @nogc World world() { 53 return this.entity.world; 54 } 55 56 } 57 58 } 59 60 final class EntityHealEvent : EntityEvent, Cancellable { 61 62 mixin Cancellable.Implementation; 63 64 mixin EntityEvent.Implementation; 65 66 private uint n_amount; 67 68 public pure nothrow @safe @nogc this(Living entity, uint amount) { 69 this.n_entity = entity; 70 this.n_amount = amount; 71 } 72 73 public pure nothrow @property @safe @nogc uint amount() { 74 return this.n_amount; 75 } 76 77 } 78 79 class EntityDeathEvent : EntityEvent { 80 81 mixin EntityEvent.Implementation; 82 83 private EntityDamageEvent n_damage; 84 85 private Translation m_message; 86 87 public pure nothrow @safe @nogc this(Living entity, EntityDamageEvent damage) { 88 this.n_entity = entity; 89 this.n_damage = damage; 90 } 91 92 public pure nothrow @property @safe @nogc EntityDamageEvent damageEvent() { 93 return this.n_damage; 94 } 95 96 public pure nothrow @property @safe @nogc Translation message() { 97 return this.m_message; 98 } 99 100 public pure nothrow @property @safe @nogc Translation message(Translation message) { 101 return this.m_message = message; 102 } 103 104 public pure nothrow @property @safe @nogc Translation message(bool display) { 105 if(display) { 106 this.m_message = this.damageEvent.message; 107 } else { 108 this.m_message = Translation.init; 109 } 110 return this.message; 111 } 112 113 }