Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / helpers / BlockController.java @ 440f8e33

1 198c5bf0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 a7a40b3c Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 198c5bf0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objectlib.helpers;
11
12
import java.util.Timer;
13
import java.util.TimerTask;
14
15
import org.distorted.library.message.EffectMessageSender;
16 7c111294 Leszek Koltunski
import org.distorted.objectlib.main.ObjectPreRender;
17 198c5bf0 Leszek Koltunski
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
public class BlockController
21
  {
22 7205c655 Leszek Koltunski
  public static final int TYPE_SCRAMBLING = 0;
23
  public static final int TYPE_ROTATION   = 1;
24
  public static final int TYPE_THREAD     = 2;
25 d887aa16 Leszek Koltunski
26 b78ebd76 Leszek Koltunski
  public static final int PLACE_0 =0;
27
  public static final int PLACE_1 =1;
28
  public static final int PLACE_2 =2;
29
  public static final int PLACE_3 =3;
30
  public static final int PLACE_4 =4;
31 186bc982 Leszek Koltunski
  public static final int PLACE_5 =5;
32 198c5bf0 Leszek Koltunski
  public static final int CONTROL_PLACE_0 =20;
33
  public static final int CONTROL_PLACE_1 =21;
34
35 45e0065d Leszek Koltunski
  private static final long THRESHHOLD_0 =  6000;
36
  private static final long THRESHHOLD_1 = 50000;
37
  private static final long THRESHHOLD_2 = 10000;
38
  private static final long THRESHHOLD_3 = 90000;
39 198c5bf0 Leszek Koltunski
40
  private static long mPauseTime, mResumeTime;
41
42 7205c655 Leszek Koltunski
  private long mRotationBlockTime, mScramblingAndSolvingBlockTime;
43
  private int mLastRotationPlace, mLastScramblingAndSolvingPlace;
44 198c5bf0 Leszek Koltunski
45 9276dced Leszek Koltunski
  private final ObjectPreRender mPre;
46 198c5bf0 Leszek Koltunski
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48
49
  public static void onPause()
50
    {
51
    mPauseTime = System.currentTimeMillis();
52
    }
53
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55
56
  public static void onResume()
57
    {
58
    mResumeTime = System.currentTimeMillis();
59
    }
60
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62
63 440f8e33 Leszek Koltunski
  public BlockController(ObjectPreRender pre)
64 198c5bf0 Leszek Koltunski
    {
65 9276dced Leszek Koltunski
    mPre = pre;
66 198c5bf0 Leszek Koltunski
67
    Timer timer = new Timer();
68
69
    timer.scheduleAtFixedRate(new TimerTask()
70
      {
71
      @Override
72
      public void run()
73
        {
74 440f8e33 Leszek Koltunski
        checkingThread();
75 198c5bf0 Leszek Koltunski
        }
76
      }, 0, 1000);
77
    }
78
79
///////////////////////////////////////////////////////////////////////////////////////////////////
80
// RUBIK_PLACE_3 and TUTORIAL_PLACE_3 are scrambles, those can take up to 20 seconds.
81
// RUBIK_PLACE_4 and TUTORIAL_PLACE_4 are solves, those can (maybe) sometimes take more than 3 seconds.
82
// CONTROL_PLACE_* are the visual tutorials, could take up to 45 seconds.
83
84
  private long getThreshhold(int last)
85
    {
86
    switch(last)
87
      {
88 2fca02cf Leszek Koltunski
      case PLACE_3         : return THRESHHOLD_1;
89 b78ebd76 Leszek Koltunski
      case PLACE_4         : return THRESHHOLD_2;
90 198c5bf0 Leszek Koltunski
      case CONTROL_PLACE_0 :
91
      case CONTROL_PLACE_1 : return THRESHHOLD_3;
92
      default              : return THRESHHOLD_0;
93
      }
94
    }
95
96
///////////////////////////////////////////////////////////////////////////////////////////////////
97
98
  private void checkingThread()
99
    {
100
    long now = System.currentTimeMillis();
101 7205c655 Leszek Koltunski
    long rotationThreshhold = getThreshhold(mLastRotationPlace);
102
    long rotationBlocked = now- mRotationBlockTime;
103 198c5bf0 Leszek Koltunski
104 7205c655 Leszek Koltunski
    if( mRotationBlockTime >mPauseTime && rotationBlocked>rotationThreshhold )
105 198c5bf0 Leszek Koltunski
      {
106
      boolean running = EffectMessageSender.isRunning();
107 d887aa16 Leszek Koltunski
      ObjectLibInterface libInterface = mPre.getInterface();
108 198c5bf0 Leszek Koltunski
109
      if( !running )
110
        {
111 d887aa16 Leszek Koltunski
        libInterface.reportBlockProblem(TYPE_THREAD,0,mPauseTime,mResumeTime,0);
112 198c5bf0 Leszek Koltunski
        EffectMessageSender.restartThread();
113
        }
114
      else
115
        {
116 7205c655 Leszek Koltunski
        libInterface.reportBlockProblem(TYPE_ROTATION, mLastRotationPlace,mPauseTime,mResumeTime, mRotationBlockTime);
117 00eed232 Leszek Koltunski
        mPre.unblockRotation();
118 198c5bf0 Leszek Koltunski
        }
119
      }
120
121 7205c655 Leszek Koltunski
    long uiThreshhold = getThreshhold(mLastScramblingAndSolvingPlace);
122
    long scramblingAndSolvingBlocked = now- mScramblingAndSolvingBlockTime;
123 198c5bf0 Leszek Koltunski
124 7205c655 Leszek Koltunski
    if( mScramblingAndSolvingBlockTime >mPauseTime && scramblingAndSolvingBlocked>uiThreshhold )
125 198c5bf0 Leszek Koltunski
      {
126
      boolean running = EffectMessageSender.isRunning();
127 d887aa16 Leszek Koltunski
      ObjectLibInterface libInterface = mPre.getInterface();
128 198c5bf0 Leszek Koltunski
129
      if( !running )
130
        {
131 d887aa16 Leszek Koltunski
        libInterface.reportBlockProblem(TYPE_THREAD,0,mPauseTime,mResumeTime,0);
132 198c5bf0 Leszek Koltunski
        EffectMessageSender.restartThread();
133
        }
134
      else
135
        {
136 7205c655 Leszek Koltunski
        libInterface.reportBlockProblem(TYPE_SCRAMBLING, mLastScramblingAndSolvingPlace,mPauseTime,mResumeTime, mScramblingAndSolvingBlockTime);
137 2e44531e Leszek Koltunski
        mPre.unblockScramblingAndSolving();
138 198c5bf0 Leszek Koltunski
        }
139
      }
140
    }
141
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143
144 7205c655 Leszek Koltunski
  public void rotationBlocked(int place)
145 198c5bf0 Leszek Koltunski
    {
146 7205c655 Leszek Koltunski
    mRotationBlockTime = System.currentTimeMillis();
147
    mLastRotationPlace = place;
148 198c5bf0 Leszek Koltunski
    }
149
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151
152 7205c655 Leszek Koltunski
  public void scramblingAndSolvingBlocked(int place)
153 198c5bf0 Leszek Koltunski
    {
154 7205c655 Leszek Koltunski
    mScramblingAndSolvingBlockTime = System.currentTimeMillis();
155
    mLastScramblingAndSolvingPlace = place;
156 198c5bf0 Leszek Koltunski
    }
157
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159
160 7205c655 Leszek Koltunski
  public void rotationUnblocked()
161 198c5bf0 Leszek Koltunski
    {
162 7205c655 Leszek Koltunski
    mRotationBlockTime = 0;
163 198c5bf0 Leszek Koltunski
    }
164
165
///////////////////////////////////////////////////////////////////////////////////////////////////
166
167 7205c655 Leszek Koltunski
  public void scramblingAndSolvingUnblocked()
168 198c5bf0 Leszek Koltunski
    {
169 7205c655 Leszek Koltunski
    mScramblingAndSolvingBlockTime = 0;
170 198c5bf0 Leszek Koltunski
    }
171
  }