1 /*
2 * Entreri, an entity-component framework in Java
3 *
4 * Copyright (c) 2013, Michael Ludwig
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without modification,
8 * are permitted provided that the following conditions are met:
9 *
10 * Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 package com.lhkbob.entreri;
28
29 /**
30 * <p/>
31 * An interface that designates something is ownable. Both entities and components can be
32 * ownable. This can be used to create hierarchies of components. As an example, a
33 * ParticleSystem component might own the Geometry component that a task prepares for it.
34 * <p/>
35 * The Ownable interface is the main entry-point for programmers to manage their
36 * inter-entity/component relationships, and not {@link Owner}. The Owner interface exists
37 * so that Ownable implementations can notify owners of changes.
38 *
39 * @author Michael Ludwig
40 */
41 public interface Ownable {
42 /**
43 * <p/>
44 * Set the new owner of the given object. If the current owner before this call is
45 * non-null, it must be first notified that its ownership has been revoked, before
46 * granting ownership to the new owner.
47 * <p/>
48 * If the new owner is null, the object becomes un-owned by anything.
49 *
50 * @param owner The new owner
51 */
52 public void setOwner(Owner owner);
53
54 /**
55 * Get the current owner of this object. If null is returned, the object is not owned
56 * by anything.
57 *
58 * @return The current owner
59 */
60 public Owner getOwner();
61 }