Commit 7b8c2f18 authored by qq247321453's avatar qq247321453

做成开关

parent 4c4f77ba
......@@ -27,6 +27,15 @@ namespace ygo {
Game *mainGame;
void Game::process(irr::SEvent &event) {
if (event.EventType == EET_MOUSE_INPUT_EVENT) {
s32 x = event.MouseInput.X;
s32 y = event.MouseInput.Y;
event.MouseInput.X = optX(x);
event.MouseInput.Y = optY(y);
}
}
#ifdef _IRR_ANDROID_PLATFORM_
void Game::stopBGM() {
......@@ -114,7 +123,9 @@ bool Game::Initialize(ANDROID_APP app, android::InitOptions *options) {
if (!android::perfromTrick(app)) {
return false;
}
android::initJavaBridge(app, device);
core::position2di appPosition = android::initJavaBridge(app, device);
setPositionFix(appPosition);
device->setProcessReceiver(this);
app->onInputEvent = android::handleInput;
ILogger* logger = device->getLogger();
......
......@@ -129,7 +129,7 @@ struct FadingUnit {
irr::core::vector2di fadingDiff;
};
class Game{
class Game :IProcessEventReceiver{
public:
#ifdef _IRR_ANDROID_PLATFORM_
......@@ -662,6 +662,27 @@ public:
Signal externalSignal;
static void onHandleAndroidCommand(ANDROID_APP app, int32_t cmd);
#endif
void setPositionFix(core::position2di fix){
InputFix = fix;
}
float optX(float x) {
float x2 = x - InputFix.X;
if (x2 < 0) {
return 0;
}
return x2;
}
float optY(float y) {
float y2 = y - InputFix.Y;
if (y2 < 0) {
return 0;
}
return y2;
}
void process(irr::SEvent &event);
private:
core::position2di InputFix;
};
extern Game *mainGame;
......
......@@ -40,6 +40,7 @@ int GetListBoxIndex(IGUIListBox* listbox, const wchar_t * target){
return -1;
}
void android_main(ANDROID_APP app) {
app->inputPollSource.process = android::process_input;
#else
int main(int argc, char* argv[]) {
#endif
......
......@@ -749,9 +749,9 @@ void toggleGlobalIME(ANDROID_APP app, bool pShow) {
app->activity->vm->DetachCurrentThread();
}
void initJavaBridge(ANDROID_APP app, void* handle) {
core::position2di initJavaBridge(ANDROID_APP app, void* handle) {
if (!app || !app->activity || !app->activity->vm)
return;
return core::position2di(0, 0);
JNIEnv* jni = nullptr;
app->activity->vm->AttachCurrentThread(&jni, NULL);
jobject lNativeActivity = app->activity->clazz;
......@@ -760,9 +760,18 @@ void initJavaBridge(ANDROID_APP app, void* handle) {
"setNativeHandle", "(J)V");
jlong code = (jlong) handle;
jni->CallVoidMethod(lNativeActivity, MethodSetHandle, code);
jmethodID methodX = jni->GetMethodID(ClassNativeActivity,
"getPositionX", "()I");
jint posX = jni->CallIntMethod(lNativeActivity, methodX);
jmethodID methodY = jni->GetMethodID(ClassNativeActivity,
"getPositionY", "()I");
jint posY = jni->CallIntMethod(lNativeActivity, methodY);
jni->DeleteLocalRef(ClassNativeActivity);
app->activity->vm->DetachCurrentThread();
__android_log_print(ANDROID_LOG_INFO, "ygo", "Android command initJavaBridge");
__android_log_print(ANDROID_LOG_INFO, "ygo", "Android command initJavaBridge posX=%d, posY=%d", posX, posY);
return core::position2di((int)posX, (int)posY);
}
InitOptions* getInitOptions(ANDROID_APP app) {
......@@ -860,6 +869,30 @@ void toggleOverlayView(ANDROID_APP app, bool pShow) {
app->activity->vm->DetachCurrentThread();
}
void process_input(ANDROID_APP app,
struct android_poll_source* source) {
AInputEvent* event = NULL;
if (AInputQueue_getEvent(app->inputQueue, &event) >= 0) {
int type = AInputEvent_getType(event);
bool skip_predispatch = AInputEvent_getType(event)
== AINPUT_EVENT_TYPE_KEY
&& AKeyEvent_getKeyCode(event) == AKEYCODE_BACK;
// skip predispatch (all it does is send to the IME)
if (!skip_predispatch
&& AInputQueue_preDispatchEvent(app->inputQueue, event)) {
return;
}
int32_t handled = 0;
if (app->onInputEvent != NULL)
handled = app->onInputEvent(app, event);
AInputQueue_finishEvent(app->inputQueue, event, handled);
} else {
// LOGE("Failure reading next input event: %s\n", strerror(errno));
}
}
void onGameExit(ANDROID_APP app){
if (!app || !app->activity || !app->activity->vm)
return;
......
......@@ -126,7 +126,7 @@ extern void toggleGlobalIME(ANDROID_APP app, bool pShow);
extern void toggleIME(ANDROID_APP app, bool pShow, const char* hint);
//Init Java Irrlicht world.
extern void initJavaBridge(ANDROID_APP app, void* handle);
extern core::position2di initJavaBridge(ANDROID_APP app, void* handle);
//Cause a haptic feedback.
extern void perfromHapticFeedback(ANDROID_APP app);
......@@ -186,6 +186,10 @@ extern bool getFontAntiAlias(ANDROID_APP app);
extern void showAndroidComboBoxCompat(ANDROID_APP app, bool pShow,
char** pContents, int count, int mode = 0);
/* android event handlers*/
extern void process_input(ANDROID_APP app,
struct android_poll_source* source);
extern s32 handleInput(ANDROID_APP app, AInputEvent* androidEvent);
extern bool android_deck_delete(const char* deck_name);
......
APP_ABI := arm64-v8a #armeabi-v7a x86
APP_ABI := armeabi-v7a //arm64-v8a x86
APP_PLATFORM := android-21
#APP_MODULES := YGOMobile
#NDK_TOOLCHAIN_VERSION=4.8
......
......@@ -294,6 +294,14 @@ static void* join_game_thread(void* param) {
}
}
JNIEXPORT void JNICALL Java_cn_garymb_ygomobile_core_IrrlichtBridge_nativeSetInputFix(
JNIEnv* env, jclass clazz, jlong handle, jint x, jint y) {
if(ygo::mainGame) {
ALOGD("setInputFix posX=%d, posY=%d", x, y);
ygo::mainGame->setPositionFix(core::position2di(x, y));
}
}
static void* cancel_chain_thread(void* param) {
IrrlichtDevice* device = (IrrlichtDevice*) param;
irr::os::Printer::log("before send cancel chain");
......
......@@ -18,8 +18,6 @@ import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
......@@ -51,7 +49,7 @@ public class YGOMobileActivity extends GameActivity implements
TextView.OnEditorActionListener,
OverlayOvalView.OnDuelOptionsSelectListener {
private static final String TAG = YGOMobileActivity.class.getSimpleName();
private static final boolean DEBUG = true;
private static final boolean DEBUG = false;
private static final int CHAIN_CONTROL_PANEL_X_POSITION_LEFT_EDGE = 205;
private static final int CHAIN_CONTROL_PANEL_Y_REVERT_POSITION = 100;
private static final int MAX_REFRESH = 30 * 1000;
......@@ -70,13 +68,14 @@ public class YGOMobileActivity extends GameActivity implements
private NetworkController mNetController;
private volatile boolean mOverlayShowRequest = false;
private volatile int mCompatGUIMode;
// private static int sChainControlXPostion = -1;
// private static int sChainControlXPostion = -1;
// private static int sChainControlYPostion = -1;
private GameApplication mApp;
private FullScreenUtils mFullScreenUtils;
private volatile int mPositionX, mPositionY;
private String[] mArgV;
private boolean onGameExiting;
private static final boolean blockKey = false;
private GameApplication app() {
......@@ -96,6 +95,8 @@ public class YGOMobileActivity extends GameActivity implements
@Override
protected void initBeforeOnCreate() {
mPositionX = 0;
mPositionY = 0;
mFullScreenUtils = new FullScreenUtils(this, app().isImmerSiveMode());
mFullScreenUtils.fullscreen();
mFullScreenUtils.onCreate();
......@@ -155,17 +156,6 @@ public class YGOMobileActivity extends GameActivity implements
}
}
private void initPostion() {
// final Resources res = getResources();
// sChainControlXPostion = (int) (CHAIN_CONTROL_PANEL_X_POSITION_LEFT_EDGE * app()
// .getXScale());
// sChainControlYPostion = (int) (app().getSmallerSize()
// - CHAIN_CONTROL_PANEL_Y_REVERT_POSITION
// * app().getYScale() - (res
// .getDimensionPixelSize(R.dimen.chain_control_button_height) * 2 + res
// .getDimensionPixelSize(R.dimen.chain_control_margin)));
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
......@@ -197,6 +187,9 @@ public class YGOMobileActivity extends GameActivity implements
if (app().isImmerSiveMode()) {
mFullScreenUtils.fullscreen();
app().attachGame(this);
if (USE_SURFACE) {
changeGameSize();
}
}
}
......@@ -216,10 +209,25 @@ public class YGOMobileActivity extends GameActivity implements
return new Size(w, h);
}
@Override
public int getPositionX() {
synchronized (this) {
return mPositionX;
}
}
@Override
public int getPositionY() {
synchronized (this) {
return mPositionY;
}
}
@Override
public void setContentView(View view) {
super.setContentView(view);
app().attachGame(this);
changeGameSize();
//可以通过mLayout.addView添加view,增加功能
//test code
// int size = (int) (getResources().getDisplayMetrics().density * 100);
......@@ -236,6 +244,29 @@ public class YGOMobileActivity extends GameActivity implements
// mLayout.addView(imageView, lp);
}
private void changeGameSize() {
if (USE_MY_INPUT) {
return;
}
//游戏大小
Size size = getGameWindowSize();
int w = (int) app().getScreenHeight();
int h = (int) app().getScreenWidth();
int spX = (int) ((w - size.getWidth()) / 2.0f);
int spY = (int) ((h - size.getHeight()) / 2.0f);
boolean update = false;
synchronized (this) {
if (spX != mPositionX || spY != mPositionY) {
mPositionX = spX;
mPositionY = spY;
update = true;
}
}
if (update) {
IrrlichtBridge.setInputFix(mPositionX, mPositionY);
}
}
private void initExtraView() {
mContentView = getWindow().getDecorView().findViewById(android.R.id.content);
mGlobalComboBox = new ComboBoxCompat(this);
......@@ -437,7 +468,30 @@ public class YGOMobileActivity extends GameActivity implements
});
}
private long lasttime;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (blockKey && USE_MY_INPUT) {
if (keyCode != KeyEvent.KEYCODE_VOLUME_DOWN
&& keyCode != KeyEvent.KEYCODE_VOLUME_UP) {
sendInputEvent(event, false);
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (blockKey && USE_MY_INPUT) {
if (keyCode != KeyEvent.KEYCODE_VOLUME_DOWN
&& keyCode != KeyEvent.KEYCODE_VOLUME_UP) {
sendInputEvent(event, false);
return true;
}
}
return super.onKeyUp(keyCode, event);
}
@Override
public void onBackPressed() {
......@@ -449,12 +503,6 @@ public class YGOMobileActivity extends GameActivity implements
mGlobalEditText.dismiss();
return;
}
if (lasttime == 0 || (System.currentTimeMillis() - lasttime) > 1000) {
lasttime = System.currentTimeMillis();
Toast.makeText(this, R.string.tip_exit_game, Toast.LENGTH_SHORT).show();
return;
}
onGameExit();
}
@Override
......
......@@ -107,6 +107,12 @@ public class InputQueueCompat implements InvocationHandler {
return inputQueue;
}
/**
*
* @param e
* @param token
* @param predispatch 跳过输入法
*/
public void sendInputEvent(InputEvent e, Object token, boolean predispatch) {
if (sendInputEvent_method == null) {
......
......@@ -6,6 +6,7 @@ import android.os.Bundle;
import android.util.Log;
import android.util.Size;
import android.view.Gravity;
import android.view.InputEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
......@@ -19,10 +20,10 @@ public abstract class GameActivity extends NativeActivity {
protected SurfaceView mSurfaceView;
private boolean replaced = false;
//自定义surface,方便控制窗口大小
private static final boolean USE_SURFACE = true;
//精准触摸事件
private static final boolean USE_MY_INPUT = true;
protected InputQueueCompat inputQueueCompat;
protected static final boolean USE_SURFACE = true;
//接管系统触摸事件,再次分发给游戏
protected static final boolean USE_MY_INPUT = true;
private InputQueueCompat inputQueueCompat;
@Override
protected final void onCreate(Bundle savedInstanceState) {
......@@ -91,12 +92,15 @@ public abstract class GameActivity extends NativeActivity {
}
protected void onSurfaceTouch(View v, MotionEvent event){
sendInputEvent(event, false);
}
protected void sendInputEvent(InputEvent event, boolean predispatch){
if (inputQueueCompat != null) {
inputQueueCompat.sendInputEvent(event, v, true);
inputQueueCompat.sendInputEvent(event, this, predispatch);
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (USE_SURFACE) {
......@@ -136,28 +140,6 @@ public abstract class GameActivity extends NativeActivity {
}
super.surfaceRedrawNeeded(holder);
}
//
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if(inputQueueCompat != null) {
// if (keyCode == KeyEvent.KEYCODE_BACK) {
// inputQueueCompat.sendInputEvent(event, this, true);
// return true;
// }
// }
// return super.onKeyDown(keyCode, event);
// }
//
// @Override
// public boolean onKeyUp(int keyCode, KeyEvent event) {
// if(inputQueueCompat != null) {
// if (keyCode == KeyEvent.KEYCODE_BACK) {
// inputQueueCompat.sendInputEvent(event, this, true);
// return true;
// }
// }
// return super.onKeyUp(keyCode, event);
// }
protected abstract Size getGameWindowSize();
protected abstract void initBeforeOnCreate();
......
......@@ -82,6 +82,8 @@ public final class IrrlichtBridge {
private static native void nativeJoinGame(long handle, ByteBuffer buffer, int length);
private static native void nativeSetInputFix(long handle, int x, int y);
private static final boolean DEBUG = false;
public static void setArgs(Intent intent, String[] args) {
......@@ -153,6 +155,10 @@ public final class IrrlichtBridge {
}
}
public static void setInputFix(int x, int y) {
nativeSetInputFix(sNativeHandle, x, y);
}
public static void cancelChain() {
nativeCancelChain(sNativeHandle);
}
......@@ -238,6 +244,10 @@ public final class IrrlichtBridge {
void setNativeHandle(long nativeHandle);
int getPositionX();
int getPositionY();
void onGameExit();
}
}
......@@ -5,4 +5,5 @@
<string name="react_chain">표시 시간 </string>
<string name="refresh_textures">인터페이스 새로 고침 </string>
<string name="tip_exit_game">게임을 종료하려면 뒤로 버튼을 다시 클릭하십시오. </string>
<string name="tip_please_quit_in_game">请在游戏主菜单点击\"退出游戏\"</string>
</resources>
\ No newline at end of file
......@@ -5,4 +5,5 @@
<string name="react_chain">显示时点</string>
<string name="refresh_textures">刷新界面</string>
<string name="tip_exit_game">再次点击返回键退出游戏</string>
<string name="tip_please_quit_in_game">请在游戏主菜单点击\"退出游戏\"</string>
</resources>
\ No newline at end of file
......@@ -6,4 +6,5 @@
<string name="react_chain">Show All Timing</string>
<string name="refresh_textures">Refresh Textures</string>
<string name="tip_exit_game">Click the BACK key again to exit the game </string>
<string name="tip_please_quit_in_game">Please click \"退出游戏\" in game.</string>
</resources>
\ No newline at end of file
......@@ -42,3 +42,14 @@
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
-keep class com.tencent.smtt.** {
*;
}
-keep class com.tencent.tbs.** {
*;
}
\ No newline at end of file
......@@ -129,7 +129,6 @@ public class CardLoader implements ICardSearcher {
List<Card> list = new ArrayList<>();
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
//ָΧ
if (inCards != null && (!inCards.contains(card.Code) && !inCards.contains(card.Alias))) {
continue;
}
......
......@@ -47,6 +47,7 @@ import com.ourygo.assistant.base.listener.OnDuelAssistantListener;
import com.ourygo.assistant.util.DuelAssistantManagement;
import com.ourygo.assistant.util.Util;
import com.tencent.bugly.beta.Beta;
import com.tencent.smtt.export.external.TbsCoreSettings;
import com.tencent.smtt.sdk.QbSdk;
import com.tubb.smrv.SwipeMenuRecyclerView;
......@@ -57,6 +58,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import cn.garymb.ygodata.YGOGameOptions;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment