Project

General

Profile

Download (6.43 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / control / RubikControl.java @ 834b2618

1 f5da732a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube 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
// Magic Cube 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 Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.control;
21
22 51f51f83 Leszek Koltunski
import org.distorted.library.main.DistortedNode;
23 f8eece7d Leszek Koltunski
import org.distorted.library.main.DistortedScreen;
24 f5da732a Leszek Koltunski
import org.distorted.library.message.EffectListener;
25
import org.distorted.main.RubikActivity;
26 8ba7aeb1 Leszek Koltunski
import org.distorted.main.RubikSurfaceView;
27 f5da732a Leszek Koltunski
28
import java.lang.ref.WeakReference;
29
30
///////////////////////////////////////////////////////////////////////////////////////////////////
31
32 51f51f83 Leszek Koltunski
public class RubikControl implements EffectListener
33 f5da732a Leszek Koltunski
  {
34 314bffaf Leszek Koltunski
  private static RubikControl mControl;
35
36 f5da732a Leszek Koltunski
  WeakReference<RubikActivity> mRefAct;
37
  boolean mWholeReturned, mRotateReturned;
38
39 51f51f83 Leszek Koltunski
  RubikControlWhole mWhole;
40
  RubikControlRotate mRotate;
41 f5da732a Leszek Koltunski
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43
44 f7f24f23 Leszek Koltunski
  DistortedScreen getScreen()
45 f5da732a Leszek Koltunski
    {
46 51f51f83 Leszek Koltunski
    RubikActivity act = mRefAct.get();
47 f8eece7d Leszek Koltunski
    return act!=null ? act.getScreen() : null;
48 f5da732a Leszek Koltunski
    }
49
50 8ba7aeb1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
51
52
  RubikSurfaceView getSurfaceView()
53
    {
54
    RubikActivity act = mRefAct.get();
55
    return act!=null ? act.getSurfaceView() : null;
56
    }
57
58 f5da732a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
59
60 51f51f83 Leszek Koltunski
  private void addWholeObjects()
61 f5da732a Leszek Koltunski
    {
62 f8eece7d Leszek Koltunski
    DistortedScreen screen = getScreen();
63 51f51f83 Leszek Koltunski
    DistortedNode[] nodes = mWhole.getNodes();
64 f5da732a Leszek Koltunski
65 f8eece7d Leszek Koltunski
    if( screen!=null && nodes!=null )
66 51f51f83 Leszek Koltunski
      {
67 f8eece7d Leszek Koltunski
      for (DistortedNode node : nodes) screen.attach(node);
68 51f51f83 Leszek Koltunski
      }
69 f5da732a Leszek Koltunski
    }
70
71
///////////////////////////////////////////////////////////////////////////////////////////////////
72
73
  private void removeWholeObjects()
74
    {
75 f8eece7d Leszek Koltunski
    DistortedScreen screen = getScreen();
76 51f51f83 Leszek Koltunski
    DistortedNode[] nodes = mWhole.returnNodes();
77 f5da732a Leszek Koltunski
78 f8eece7d Leszek Koltunski
    if( screen!=null && nodes!=null )
79 51f51f83 Leszek Koltunski
      {
80 f8eece7d Leszek Koltunski
      for (DistortedNode node : nodes) screen.detach(node);
81 51f51f83 Leszek Koltunski
      }
82 f5da732a Leszek Koltunski
    }
83
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85
86
  private void addRotateObjects()
87
    {
88 f8eece7d Leszek Koltunski
    DistortedScreen screen = getScreen();
89 51f51f83 Leszek Koltunski
    DistortedNode[] nodes = mRotate.getNodes();
90 f5da732a Leszek Koltunski
91 f8eece7d Leszek Koltunski
    if( screen!=null && nodes!=null )
92 51f51f83 Leszek Koltunski
      {
93 f8eece7d Leszek Koltunski
      for (DistortedNode node : nodes) screen.attach(node);
94 51f51f83 Leszek Koltunski
      }
95 f5da732a Leszek Koltunski
    }
96
97
///////////////////////////////////////////////////////////////////////////////////////////////////
98
99
  private void removeRotateObjects()
100
    {
101 f8eece7d Leszek Koltunski
    DistortedScreen screen = getScreen();
102 51f51f83 Leszek Koltunski
    DistortedNode[] nodes = mRotate.returnNodes();
103 f5da732a Leszek Koltunski
104 f8eece7d Leszek Koltunski
    if( screen!=null && nodes!=null )
105 51f51f83 Leszek Koltunski
      {
106 f8eece7d Leszek Koltunski
      for (DistortedNode node : nodes) screen.detach(node);
107 51f51f83 Leszek Koltunski
      }
108 f5da732a Leszek Koltunski
    }
109
110
///////////////////////////////////////////////////////////////////////////////////////////////////
111
112
  private void finishWhole()
113
    {
114
    removeWholeObjects();
115
116
    mWholeReturned = true;
117
118 51f51f83 Leszek Koltunski
    if( !mRotateReturned ) addRotateObjects();
119 f5da732a Leszek Koltunski
    }
120
121
///////////////////////////////////////////////////////////////////////////////////////////////////
122
123
  private void finishRotate()
124
    {
125
    removeRotateObjects();
126
127
    mRotateReturned= true;
128
129
    RubikActivity act = mRefAct.get();
130
    if( act!=null ) act.unblockEverything();
131
    }
132
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135 51f51f83 Leszek Koltunski
  RubikActivity getActivity()
136 f5da732a Leszek Koltunski
    {
137 51f51f83 Leszek Koltunski
    return mRefAct.get();
138
    }
139 f5da732a Leszek Koltunski
140 51f51f83 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
141 f5da732a Leszek Koltunski
142 314bffaf Leszek Koltunski
  private RubikControl()
143 51f51f83 Leszek Koltunski
    {
144
    mWhole = new RubikControlWhole(this);
145
    mRotate= new RubikControlRotate(this);
146 f5da732a Leszek Koltunski
    }
147
148 314bffaf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
149
// PUBLIC
150
151
  public static RubikControl getInstance()
152
    {
153
    if( mControl==null ) mControl = new RubikControl();
154
155
    return mControl;
156
    }
157
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159
160
  public void postDrawFrame(long time)
161
    {
162
    mWhole.postDrawFrame(time);
163
    }
164
165 f5da732a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
166
167
  public void effectFinished(long effectID)
168
    {
169 f7f24f23 Leszek Koltunski
    if( effectID==mWhole.getEffectID()  ) finishWhole();
170
    if( effectID==mRotate.getEffectID() ) finishRotate();
171 f5da732a Leszek Koltunski
    }
172
173
///////////////////////////////////////////////////////////////////////////////////////////////////
174
175
  public void animateAll(RubikActivity act)
176
    {
177
    act.blockEverything();
178
    mRefAct = new WeakReference<>(act);
179
180
    mWholeReturned = false;
181
    mRotateReturned= false;
182
183 51f51f83 Leszek Koltunski
    addWholeObjects();
184 f5da732a Leszek Koltunski
    }
185
186
///////////////////////////////////////////////////////////////////////////////////////////////////
187
188
  public void animateRotate(RubikActivity act)
189
    {
190
    act.blockEverything();
191
    mRefAct = new WeakReference<>(act);
192
193
    mWholeReturned = true;
194
    mRotateReturned= false;
195
196 51f51f83 Leszek Koltunski
    addRotateObjects();
197 f5da732a Leszek Koltunski
    }
198
  }