Project

General

Profile

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

magiccube / src / main / java / org / distorted / main / RubikSurfaceView.java @ ed0ea1c5

1 0c52af30 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2019 Leszek Koltunski                                                               //
3
//                                                                                               //
4 fdec60a3 Leszek Koltunski
// This file is part of Magic Cube.                                                              //
5 0c52af30 Leszek Koltunski
//                                                                                               //
6 296219b4 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 0c52af30 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 1f9772f3 Leszek Koltunski
package org.distorted.main;
11 0c52af30 Leszek Koltunski
12 f57d0ad9 Leszek Koltunski
import android.annotation.SuppressLint;
13 0c52af30 Leszek Koltunski
import android.app.ActivityManager;
14
import android.content.Context;
15
import android.content.pm.ConfigurationInfo;
16 4489e68e Leszek Koltunski
import android.opengl.GLES30;
17 0c52af30 Leszek Koltunski
import android.opengl.GLSurfaceView;
18
import android.util.AttributeSet;
19
import android.view.MotionEvent;
20
21 b96a20a4 Leszek Koltunski
import com.google.firebase.crashlytics.FirebaseCrashlytics;
22
23 6828c498 Leszek Koltunski
import org.distorted.external.RubikScores;
24
import org.distorted.library.main.DistortedScreen;
25 dd1a65c1 Leszek Koltunski
import org.distorted.objectlib.main.ObjectControl;
26 a946af34 Leszek Koltunski
import org.distorted.objectlib.main.TwistyObjectNode;
27 ed0ea1c5 Leszek Koltunski
import org.distorted.os.OSInterface;
28 6828c498 Leszek Koltunski
import org.distorted.overlays.DataStars;
29
import org.distorted.overlays.OverlayStars;
30 fcd5b990 Leszek Koltunski
import org.distorted.screens.ScreenList;
31 0c52af30 Leszek Koltunski
32
///////////////////////////////////////////////////////////////////////////////////////////////////
33
34 1bafcba4 Leszek Koltunski
public class RubikSurfaceView extends GLSurfaceView
35 0c52af30 Leszek Koltunski
{
36 dd1a65c1 Leszek Koltunski
    private ObjectControl mObjectController;
37 ed0ea1c5 Leszek Koltunski
    private OSInterface mInterface;
38 beb325a0 Leszek Koltunski
    private RubikRenderer mRenderer;
39 dd1a65c1 Leszek Koltunski
    private int mScreenWidth, mScreenHeight;
40 338babe8 Leszek Koltunski
    private boolean mCreated;
41 6828c498 Leszek Koltunski
    private boolean mShowStars;
42 ee5c2ae1 Leszek Koltunski
43 0fd3ac1f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45
    void setScreenSize(int width, int height)
46
      {
47
      mScreenWidth = width;
48
      mScreenHeight= height;
49 b1178f5f Leszek Koltunski
      mObjectController.setScreenSizeAndScaling(width,height, Math.min(width, (int)(0.75f*height)));
50 2da68298 Leszek Koltunski
51 338babe8 Leszek Koltunski
      if( !mCreated )
52
        {
53
        mCreated = true;
54
        mObjectController.createNode(width,height);
55 a946af34 Leszek Koltunski
        TwistyObjectNode objectNode = mObjectController.getNode();
56 b4cbe056 Leszek Koltunski
        objectNode.glDepthMask(false);
57
        objectNode.glStencilMask(0);
58 338babe8 Leszek Koltunski
        mRenderer.getScreen().attach(objectNode);
59 6828c498 Leszek Koltunski
60
        if( mShowStars )
61
          {
62
          mShowStars = false;
63
          RubikScores scores = RubikScores.getInstance();
64
          int totStars = scores.getNumStars();
65
          DistortedScreen screen = mRenderer.getScreen();
66
          OverlayStars stars = new OverlayStars();
67
          DataStars data = new DataStars(totStars,0,getResources());
68
          stars.startOverlay(screen,null,data);
69
          }
70 338babe8 Leszek Koltunski
        }
71 0fd3ac1f Leszek Koltunski
      }
72
73 6828c498 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
74
75
    void setShowStars()
76
      {
77
      mShowStars = true;
78
      }
79
80 4c0cd600 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
81
82
    boolean isVertical()
83
      {
84
      return mScreenHeight>mScreenWidth;
85
      }
86
87 0fd3ac1f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
88
89
    RubikRenderer getRenderer()
90
      {
91
      return mRenderer;
92
      }
93
94 8becce57 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
95
96 2afc6754 Leszek Koltunski
    ObjectControl getObjectControl()
97 8becce57 Leszek Koltunski
      {
98 2afc6754 Leszek Koltunski
      return mObjectController;
99 e03e0352 Leszek Koltunski
      }
100
101 47ba5ddc Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
102
// PUBLIC API
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105
    public RubikSurfaceView(Context context, AttributeSet attrs)
106
      {
107
      super(context,attrs);
108
109 338babe8 Leszek Koltunski
      mCreated = false;
110 6828c498 Leszek Koltunski
      mShowStars = false;
111 338babe8 Leszek Koltunski
112 47ba5ddc Leszek Koltunski
      if(!isInEditMode())
113
        {
114 cd83d0aa Leszek Koltunski
        RubikActivity act = (RubikActivity)context;
115 e019c70b Leszek Koltunski
        RubikObjectLibInterface ref = new RubikObjectLibInterface(act);
116 ed0ea1c5 Leszek Koltunski
        mInterface = new OSInterface(act);
117 ac4c7a1d Leszek Koltunski
        mObjectController = new ObjectControl(ref,mInterface);
118 2afc6754 Leszek Koltunski
        mRenderer = new RubikRenderer(this);
119 cd83d0aa Leszek Koltunski
120
        final ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
121
122 4489e68e Leszek Koltunski
        try
123 cd83d0aa Leszek Koltunski
          {
124
          final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
125 e7e0a94d Leszek Koltunski
          int esVersion = configurationInfo.reqGlEsVersion>>16;
126
          setEGLContextClientVersion(esVersion);
127 cd83d0aa Leszek Koltunski
          setRenderer(mRenderer);
128
          }
129 4489e68e Leszek Koltunski
        catch(Exception ex)
130
          {
131 e7e0a94d Leszek Koltunski
          act.OpenGLError();
132 4489e68e Leszek Koltunski
133
          String shading = GLES30.glGetString(GLES30.GL_SHADING_LANGUAGE_VERSION);
134
          String version = GLES30.glGetString(GLES30.GL_VERSION);
135
          String vendor  = GLES30.glGetString(GLES30.GL_VENDOR);
136
          String renderer= GLES30.glGetString(GLES30.GL_RENDERER);
137
138
          FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
139
          crashlytics.setCustomKey("GLSL Version"  , shading );
140 0812242b Leszek Koltunski
          crashlytics.setCustomKey("GL version"    , version );
141 4489e68e Leszek Koltunski
          crashlytics.setCustomKey("GL Vendor "    , vendor  );
142 0812242b Leszek Koltunski
          crashlytics.setCustomKey("GLSL renderer" , renderer);
143 4489e68e Leszek Koltunski
          crashlytics.recordException(ex);
144
          }
145 47ba5ddc Leszek Koltunski
        }
146
      }
147
148 eaf46415 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
149
150 c65a5efe Leszek Koltunski
    @Override
151
    public void onPause()
152 eaf46415 Leszek Koltunski
      {
153 c65a5efe Leszek Koltunski
      super.onPause();
154
      mObjectController.onPause();
155 eaf46415 Leszek Koltunski
      }
156
157
///////////////////////////////////////////////////////////////////////////////////////////////////
158
159 05c20dad Leszek Koltunski
    @Override
160
    public void onResume()
161 9205f15e Leszek Koltunski
      {
162 05c20dad Leszek Koltunski
      super.onResume();
163 c65a5efe Leszek Koltunski
      mObjectController.onResume();
164 9205f15e Leszek Koltunski
      }
165
166 47ba5ddc Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
167
168 f57d0ad9 Leszek Koltunski
    @SuppressLint("ClickableViewAccessibility")
169 47ba5ddc Leszek Koltunski
    @Override
170
    public boolean onTouchEvent(MotionEvent event)
171
      {
172 dd1a65c1 Leszek Koltunski
      int mode = ScreenList.getMode();
173
      return mObjectController.onTouchEvent(event,mode);
174 47ba5ddc Leszek Koltunski
      }
175 0c52af30 Leszek Koltunski
}