Project

General

Profile

Download (7.38 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / main / DistortedEffects.java @ 7602a827

1 d333eb6b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4 7602a827 Leszek Koltunski
// This file is part of DistortedLibrary.                                                               //
5 d333eb6b Leszek Koltunski
//                                                                                               //
6 7602a827 Leszek Koltunski
// DistortedLibrary is free software: you can redistribute it and/or modify                             //
7 d333eb6b Leszek Koltunski
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11 7602a827 Leszek Koltunski
// DistortedLibrary is distributed in the hope that it will be useful,                                  //
12 d333eb6b Leszek Koltunski
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17 7602a827 Leszek Koltunski
// along with DistortedLibrary.  If not, see <http://www.gnu.org/licenses/>.                            //
18 d333eb6b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 fe82a979 Leszek Koltunski
package org.distorted.library.main;
21 6a06a912 Leszek Koltunski
22 fe82a979 Leszek Koltunski
import org.distorted.library.effect.Effect;
23 da9b3f07 Leszek Koltunski
import org.distorted.library.effect.EffectName;
24 809dcae3 Leszek Koltunski
import org.distorted.library.effectqueue.EffectQueue;
25 da9b3f07 Leszek Koltunski
import org.distorted.library.effect.EffectType;
26 e458a4ba Leszek Koltunski
import org.distorted.library.message.EffectListener;
27 c638c1b0 Leszek Koltunski
28 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
29 b329f352 Leszek Koltunski
/**
30 faa3ff56 Leszek Koltunski
 * Class containing Matrix, Vertex, Fragment and Postprocessing effect queues.
31 b73dcaa7 Leszek Koltunski
 * <p>
32 715e7726 Leszek Koltunski
 * The queues hold actual effects to be applied to a given (InputSurface,MeshBase) combo.
33 b329f352 Leszek Koltunski
 */
34 86d322b5 Leszek Koltunski
public class DistortedEffects
35 d425545a Leszek Koltunski
  {
36 8e34674e Leszek Koltunski
  private static long mNextID =0;
37 4e2382f3 Leszek Koltunski
  private long mID;
38 a0397f32 Leszek Koltunski
  private EffectQueue[] mQueues;
39 3d590d8d Leszek Koltunski
40 55c14a19 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
41 809dcae3 Leszek Koltunski
/**
42
 * @y.exclude
43
 */
44
  public EffectQueue[] getQueues()
45 d425545a Leszek Koltunski
    {
46 a0397f32 Leszek Koltunski
    return mQueues;
47 80b3acf6 Leszek Koltunski
    }
48
49 78e89fb5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
50
51
  static void onDestroy()
52
    {
53
    mNextID =  0;
54
    }
55
56 8e34674e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
57
// PUBLIC API
58 ada90d33 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
59 d425545a Leszek Koltunski
/**
60 4e2382f3 Leszek Koltunski
 * Create empty effect queue.
61 d425545a Leszek Koltunski
 */
62 421c2728 Leszek Koltunski
  public DistortedEffects()
63 d425545a Leszek Koltunski
    {
64 c7da4e65 leszek
    mID = ++mNextID;
65 a0397f32 Leszek Koltunski
    mQueues = new EffectQueue[EffectType.LENGTH];
66
    EffectQueue.allocateQueues(mQueues,null,0,mID);
67 d425545a Leszek Koltunski
    }
68 ada90d33 Leszek Koltunski
69
///////////////////////////////////////////////////////////////////////////////////////////////////
70 d425545a Leszek Koltunski
/**
71 4e2382f3 Leszek Koltunski
 * Copy constructor.
72 d425545a Leszek Koltunski
 * <p>
73
 * Whatever we do not clone gets created just like in the default constructor.
74
 *
75
 * @param dc    Source object to create our object from
76
 * @param flags A bitmask of values specifying what to copy.
77 e6ab30eb Leszek Koltunski
 *              For example, CLONE_VERTEX | CLONE_MATRIX.
78 d425545a Leszek Koltunski
 */
79 421c2728 Leszek Koltunski
  public DistortedEffects(DistortedEffects dc, int flags)
80 d425545a Leszek Koltunski
    {
81 c7da4e65 leszek
    mID = ++mNextID;
82 a0397f32 Leszek Koltunski
    mQueues = new EffectQueue[EffectType.LENGTH];
83
    EffectQueue.allocateQueues(mQueues,dc.getQueues(),flags,mID);
84 d425545a Leszek Koltunski
    }
85 6a06a912 Leszek Koltunski
86
///////////////////////////////////////////////////////////////////////////////////////////////////
87
/**
88 4e2382f3 Leszek Koltunski
 * Returns unique ID of this instance.
89
 *
90
 * @return ID of the object.
91 6a06a912 Leszek Koltunski
 */
92 4e2382f3 Leszek Koltunski
  public long getID()
93 d425545a Leszek Koltunski
      {
94 4e2382f3 Leszek Koltunski
      return mID;
95 d425545a Leszek Koltunski
      }
96 4e2382f3 Leszek Koltunski
97 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
98
/**
99
 * Adds the calling class to the list of Listeners that get notified each time some event happens 
100 faa3ff56 Leszek Koltunski
 * to one of the Effects in our queues. Nothing will happen if 'el' is already in the list.
101 6a06a912 Leszek Koltunski
 * 
102
 * @param el A class implementing the EffectListener interface that wants to get notifications.
103
 */
104 3fc994b2 Leszek Koltunski
  public void registerForMessages(EffectListener el)
105 d425545a Leszek Koltunski
    {
106 a0397f32 Leszek Koltunski
    for( int i=0; i<EffectType.LENGTH; i++)
107
      {
108
      mQueues[i].registerForMessages(el);
109
      }
110 d425545a Leszek Koltunski
    }
111 6a06a912 Leszek Koltunski
112
///////////////////////////////////////////////////////////////////////////////////////////////////
113
/**
114 faa3ff56 Leszek Koltunski
 * Removes the calling class from the list of Listeners that get notified if something happens to Effects in our queue.
115 6a06a912 Leszek Koltunski
 * 
116
 * @param el A class implementing the EffectListener interface that no longer wants to get notifications.
117
 */
118 3fc994b2 Leszek Koltunski
  public void deregisterForMessages(EffectListener el)
119 d425545a Leszek Koltunski
    {
120 a0397f32 Leszek Koltunski
    for( int i=0; i<EffectType.LENGTH; i++)
121
      {
122
      mQueues[i].deregisterForMessages(el);
123
      }
124 d425545a Leszek Koltunski
    }
125 6a06a912 Leszek Koltunski
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127
/**
128 d07f2950 Leszek Koltunski
 * Aborts all Effects.
129
 * @return Number of effects aborted.
130 6a06a912 Leszek Koltunski
 */
131 d425545a Leszek Koltunski
  public int abortAllEffects()
132 13687207 leszek
    {
133 a0397f32 Leszek Koltunski
    int aborted = 0;
134
135
    for( int i=0; i<EffectType.LENGTH; i++)
136
      {
137
      aborted += mQueues[i].abortAll(true);
138
      }
139
140
    return aborted;
141 13687207 leszek
    }
142 6a06a912 Leszek Koltunski
143
///////////////////////////////////////////////////////////////////////////////////////////////////
144
/**
145 d07f2950 Leszek Koltunski
 * Aborts all Effects of a given type, for example all MATRIX Effects.
146 6a06a912 Leszek Koltunski
 * 
147 da9b3f07 Leszek Koltunski
 * @param type one of the constants defined in {@link EffectType}
148 d07f2950 Leszek Koltunski
 * @return Number of effects aborted.
149 6a06a912 Leszek Koltunski
 */
150 da9b3f07 Leszek Koltunski
  public int abortByType(EffectType type)
151 d425545a Leszek Koltunski
    {
152 a0397f32 Leszek Koltunski
    int num = type.ordinal();
153
    return mQueues[num].abortAll(true);
154 d425545a Leszek Koltunski
    }
155 47316d20 leszek
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157
/**
158 faa3ff56 Leszek Koltunski
 * Aborts an Effect by its ID.
159 47316d20 leszek
 *
160
 * @param id the Id of the Effect to be removed, as returned by getID().
161
 * @return Number of effects aborted.
162
 */
163
  public int abortById(long id)
164
    {
165 a0397f32 Leszek Koltunski
    int num = (int)(id&EffectType.MASK);
166
    return mQueues[num].removeById(id);
167 47316d20 leszek
    }
168
169 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
170
/**
171
 * Aborts a single Effect.
172
 * 
173 6bb59aad Leszek Koltunski
 * @param effect the Effect we want to abort.
174 476bbc81 Leszek Koltunski
 * @return number of Effects aborted. Always either 0 or 1.
175 6a06a912 Leszek Koltunski
 */
176 6bb59aad Leszek Koltunski
  public int abortEffect(Effect effect)
177 d425545a Leszek Koltunski
    {
178 a0397f32 Leszek Koltunski
    int num = effect.getType().ordinal();
179
    return mQueues[num].removeEffect(effect);
180 d425545a Leszek Koltunski
    }
181 6a06a912 Leszek Koltunski
182
///////////////////////////////////////////////////////////////////////////////////////////////////
183
/**
184 e8c81a8e Leszek Koltunski
 * Abort all Effects of a given name, for example all rotations.
185 6a06a912 Leszek Koltunski
 * 
186 da9b3f07 Leszek Koltunski
 * @param name one of the constants defined in {@link EffectName}
187 476bbc81 Leszek Koltunski
 * @return number of Effects aborted.
188 6a06a912 Leszek Koltunski
 */
189 da9b3f07 Leszek Koltunski
  public int abortByName(EffectName name)
190 d425545a Leszek Koltunski
    {
191 a0397f32 Leszek Koltunski
    int num = name.getType().ordinal();
192
    return mQueues[num].removeByName(name);
193 d425545a Leszek Koltunski
    }
194 432442f9 Leszek Koltunski
195 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
196
/**
197 6bb59aad Leszek Koltunski
 * Add a new Effect to our queue.
198 f2fe7e28 Leszek Koltunski
 *
199 6bb59aad Leszek Koltunski
 * @param effect The Effect to add.
200 ae77d55e Leszek Koltunski
 * @return <code>true</code> if operation was successful, <code>false</code> otherwise.
201 6a06a912 Leszek Koltunski
 */
202 ae77d55e Leszek Koltunski
  public boolean apply(Effect effect)
203 d425545a Leszek Koltunski
    {
204 a0397f32 Leszek Koltunski
    int num = effect.getType().ordinal();
205
    return mQueues[num].add(effect);
206 4fde55a0 Leszek Koltunski
    }
207 f2fe7e28 Leszek Koltunski
  }