diff --git a/hyperroid/app/src/main/java/com/roguetemple/hyperroid/HyperRogue.java b/hyperroid/app/src/main/java/com/roguetemple/hyperroid/HyperRogue.java index 6823e7fa..e3ac0bbe 100644 --- a/hyperroid/app/src/main/java/com/roguetemple/hyperroid/HyperRogue.java +++ b/hyperroid/app/src/main/java/com/roguetemple/hyperroid/HyperRogue.java @@ -48,6 +48,8 @@ import android.widget.FrameLayout.LayoutParams; import android.widget.Toast; import android.util.Log; +import java.io.InputStream; + public class HyperRogue extends Activity implements SensorEventListener { private static final int RESULT_SETTINGS = 1; @@ -626,6 +628,18 @@ public class HyperRogue extends Activity implements SensorEventListener { pon.getTextBounds(s,0,s.length(),bounds); return bounds.width(); } + + public byte[] getAsset(String s) { + try { + InputStream is = getAssets().open(s); + int length = is.available(); + byte[] data = new byte[length]; + is.read(data); + return data; + } catch (IOException e) { + return null; + } + } private SensorManager mSensorManager; private Sensor mSensor; diff --git a/hyperroid/app/src/main/jni/hyper.cpp b/hyperroid/app/src/main/jni/hyper.cpp index 5c490816..c4445a78 100644 --- a/hyperroid/app/src/main/jni/hyper.cpp +++ b/hyperroid/app/src/main/jni/hyper.cpp @@ -45,6 +45,7 @@ void special_log(char c); #include namespace hr { +std::string get_asset(const std::string &str); void gdpush(int t); void shareScore(MOBPAR_FORMAL); @@ -242,6 +243,20 @@ Java_com_roguetemple_hyperroid_HyperRogue_initGame(MOBPAR_FORMAL) { JNIEnv *tw_env; jobject tw_thiz; +string get_asset(const string &str) { + jclass cls = tw_env->GetObjectClass(tw_thiz); + jmethodID mid = tw_env->GetMethodID(cls, "getAsset", "(Ljava/lang/String;)[B"); + jobject jstr = tw_env->NewStringUTF(str.c_str()); + jbyteArray arr = (jbyteArray) tw_env->CallObjectMethod(tw_thiz, mid, jstr); + tw_env->DeleteLocalRef(jstr); + tw_env->DeleteLocalRef(cls); + jsize len = tw_env->GetArrayLength(arr); + jbyte* data = tw_env->GetByteArrayElements(arr, NULL); + string s((char*) & (data[0]), len); + tw_env->DeleteLocalRef(arr); + return s; + } + int textwidth(int siz, const string &str) { jclass cls = tw_env->GetObjectClass(tw_thiz); jmethodID mid = tw_env->GetMethodID(cls, "getTextWidth", "(Ljava/lang/String;I)I"); diff --git a/hyperroid/copy.sh b/hyperroid/copy.sh index 62e8164d..70227da6 100755 --- a/hyperroid/copy.sh +++ b/hyperroid/copy.sh @@ -1,6 +1,7 @@ #!/bin/sh mkdir -p app/src/main/assets/sounds cp ../sounds/* app/src/main/assets/sounds/ +cp ../honeycomb-rules-*.txt app/src/main/assets/ mkdir -p app/src/main/res/raw/ #for x in caves crossroads desert graveyard hell icyland jungle laboratory mirror rlyeh diff --git a/reg3.cpp b/reg3.cpp index 8172a6a2..1be741f9 100644 --- a/reg3.cpp +++ b/reg3.cpp @@ -941,12 +941,17 @@ EX namespace reg3 { vector otherpos; void load_ruleset(string fname) { + string buf; + #if ISANDROID + buf = get_asset(fname); + #else FILE *f = fopen(fname.c_str(), "rb"); if(!f) f = fopen((rsrcdir + fname).c_str(), "rb"); - string buf; buf.resize(1000000); int qty = fread(&buf[0], 1, 1000000, f); buf.resize(qty); + fclose(f); + #endif shstream ins(decompress_string(buf)); dynamicval q(fieldpattern::use_quotient_fp, true); @@ -955,7 +960,6 @@ EX namespace reg3 { hread(ins, root); hread(ins, children); hread(ins, other); - fclose(f); } /** \brief address = (fieldvalue, state) */