Project

General

Profile

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

library / src / main / java / org / distorted / library / main / DistortedEffects.java @ d5b709df

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