Git Product home page Git Product logo

wwmmo's Introduction

War Worlds

War Worlds is galactic space war at its best, played online by hundreds of players at a time. Explore an infinite universe, in fact, multiple universes, known as Realms. Colonize worlds, harvest alien artefacts, raise a war fleet, and conquer your enemies!!

More information on our website: war-worlds.com

If you want to get started running your own instance, this post in our forums should get you started,

wwmmo's People

Contributors

codeka avatar pogster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wwmmo's Issues

dying stars

The dying stars would represent a chance to add a terraformer option. In all my stars, I have a bare dozen dying stars. Finding an alien gizmo when subduing the ground forces, purely at random, and only a few conquests involved, would let a player accumulate two or three terraform boxes. Boxes would 'heal' dying stars to some random amount, allowing them to re-join the community of stars. This would have the side benefit of eliminating those pesky resources depleted msgs from clogging SitRep.

NullPointerException in wormhole.DestinationDialog

java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.codeka.warworlds/au.com.codeka.warworlds.game.solarsystem.SolarSystemActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3910)
    at android.app.ActivityThread.access$700(ActivityThread.java:165)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5391)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at au.com.codeka.warworlds.game.wormhole.DestinationDialog.[onCreateDialog|access$300](SourceFile:82)
    at android.support.v4.app.DialogFragment.[onDetach|getLayoutInflater](SourceFile:307)
    at android.support.v4.app.FragmentManagerImpl.[throwException|beginTransaction|putFragment|getFragment|saveFragmentInstanceState|dump|makeOpenCloseAnimation$376f30fd|makeFadeAnimation$424ea1bd|loadAnimation|moveToState|moveToState|addFragment|removeFragment|findFragmentById|findFragmentByTag|enqueueAction|allocBackStackIndex|setBackStackIndex|popBackStackState$68507953$44bd8ea3|restoreAllState|attachActivity|dispatchConfigurationChanged|dispatchCreateOptionsMenu|dispatchPrepareOptionsMenu|dispatchOptionsItemSelected](SourceFile:942)
    at android.support.v4.app.z.a(SourceFile:1121)
    at android.support.v4.app.z.e(SourceFile:1103)
    at android.support.v4.app.z.i(SourceFile:1901)
    at android.support.v4.app.FragmentActivity.onStart(SourceFile:567)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
    at android.app.Activity.performStart(Activity.java:5132)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
    ... 12 more

AlreadyRegisteredException in FleetActivity

java.lang.RuntimeException: Unable to resume activity {au.com.codeka.warworlds/au.com.codeka.warworlds.game.solarsystem.FleetActivity}: au.com.codeka.warworlds.b.b
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2455)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2483)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4511)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: au.com.codeka.warworlds.eventbus.EventBus$AlreadyRegisteredException
    at au.com.codeka.warworlds.eventbus.EventBus.register(SourceFile:32)
    at au.com.codeka.warworlds.game.solarsystem.FleetActivity$2.onHelloComplete$1238f8d8(SourceFile:95)
    at au.com.codeka.warworlds.ServerGreeter.[addHelloWatcher|clearHello|waitForHello|access$602|access$800](SourceFile:93)
    at au.com.codeka.warworlds.game.solarsystem.FleetActivity.onResume(SourceFile:88)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1157)
    at android.app.Activity.performResume(Activity.java:4560)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2445)
    ... 10 more

Map View crashes

Ever since the update that included idle queue, the map view/tacb view is unusable. Zoom out and scroll will always crash. This makes empire navigation, expansion and attack extremely difficult. I don't know if this issue only affects larger empires but It would make the game playable again. Thank you.

More filtering options for sitrep

What's your take on shortlisting sitrep combats and new colonies? Might make data handling better if you can cut entries out of the main SitRep....cull all but what a player wants to deal with.

Wormholes as a type

Being able to list your, and your ally's wormholes as a star type. Additionally tag the wormhole entry with the ally's name and in ally-order.

NullPointerException in AllianceManager

Looks like the server responded with an empty response. I don't think that should actually be possible.

java.lang.RuntimeException: An error occured while executing doInBackground()
    at au.com.codeka.BackgroundRunner$3.done(SourceFile:78)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
    at au.com.codeka.warworlds.model.AllianceManager$4.doInBackground(SourceFile:145)
    at au.com.codeka.warworlds.model.f.b(SourceFile:131)
    at au.com.codeka.BackgroundRunner$2.call(SourceFile:66)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    ... 3 more

Colony's Sliders Keep Reverting Back

Whenever I try to set any of my colony's sliders, it keeps reverting back to what the slider was originally. This bug has been affecting me since about thirty minutes ago.

NumberFormatException in BuildConfirmDialog

java.lang.NumberFormatException: Invalid int: "15552222222"
    at java.lang.Integer.invalidInt(Integer.java:138)
    at java.lang.Integer.parse(Integer.java:378)
    at java.lang.Integer.parseInt(Integer.java:366)
    at java.lang.Integer.parseInt(Integer.java:332)
    at au.com.codeka.warworlds.game.build.BuildConfirmDialog.access$100(SourceFile:39)
    at au.com.codeka.warworlds.game.build.BuildConfirmDialog$4.onClick(SourceFile:220)
    at au.com.codeka.warworlds.StyledDialog$ButtonClickListener.onClick(SourceFile:237)
    at android.view.View.performClick(View.java:4223)
    at android.view.View$PerformClick.run(View.java:17275)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4898)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
    at dalvik.system.NativeStart.main(Native Method)

Noob-ish clarify for Locate Empire display

Currently the locate empire view shows a bunch of stars with the Homestar at display center, without any overt indication of the player's Homestar. A small, green globe, similar to the array sphere would clarify which is the Homestar. Making it also pulsate, would make it obvious even for the truely stupid. Tapping said sphere would be enhanced by a split view of solarview writ small and a survey report, detailing whether the player is allied or solo, Diplomatic status, etc., and Homestar's galactic co-ordinates on a Quadrant map. A quadrant map would offer an overall notion of the empire's placement in the galaxy. A tap on the Quad map would jump you to zoomed out Tac view to have a look at your neighbors. So many players have asked where they are located. This might be a nice way to show them. Something to ponder for the future...

Fleet merges simplified

I kind of want to open this for discussion.

My empire is at a point where many stars are just producing new ships all the time. As I see it, you can only order them in batches of 100 and when done you have several stacks of 100 ships which you can merge one at a time.

Am I doing anything wrong because I find that merge process extremely annoying but I've never seen anyone complain about it?

I would suggest an automatic merge. Maybe on button press, preferably at fleet creation? Like, when a fleet is created, check for ships of same type with same upgrades and same stance and just merge the ships onto that.

Remove assumptions from shell scripts

As mentioned in the blog post,

The scripts in the scripts/ folder should help with building the various components, but they may need some tweaking.

The current shell scripts (run-server.sh, run-client.sh, etc) make assumptions about their position relative to the source directories, including the name of which the repository was cloned (code/server).

These scripts could have these assumptions removed or at least relaxed. If nothing else, they could assume a position that matches the repository layout, making them instantly usable.

Can't tune wormholes to alliance members' wormholes

I joined a random alliance and this was the first complaint that I got.

You can only tune to your own wormholes, not to alliance members', although it should be possible.

Is this correct? Is this a bug?

config-debug.json missing

Hi Dean,
I set up the development environment on a different machine. In this latest version the run-debug.sh is started when running the server and it's missing config-debug.json in code/server/data. The file is actually not there. Did you forget to add it or is it an intended change and I need to do something differently?
Regards,
Carsten

IllegalStateException in FleetEntity

The entity in this case is the selection line. I think just doing a detachChild first will fix it.

java.lang.IllegalStateException: pEntity 'b' already has a parent: 'b'. New parent: 'b'!
    at org.andengine.entity.Entity.[onUpdateColor|setPosition|setScale|attachChild|postDraw](SourceFile:913)
    at au.com.codeka.warworlds.game.starfield.FleetEntity.onSelected(SourceFile:68)
    at au.com.codeka.warworlds.game.starfield.SelectionIndicatorEntity.[setSelectedEntity|access$000](SourceFile:58)
    at au.com.codeka.warworlds.game.starfield.StarfieldScene.refreshSelectionIndicator(SourceFile:206)
    at au.com.codeka.warworlds.game.starfield.StarfieldScene$2.run(SourceFile:139)
    at org.andengine.engine.handler.runnable.RunnableHandler.[onUpdate|postRunnable](SourceFile:42)
    at org.andengine.engine.Engine.[startUpdateThread|setScene|setSurfaceSize|setTouchController|registerUpdateHandler|onTouchEvent|runOnUpdateThread|onUpdate|onDrawFrame](SourceFile:611)
    at org.andengine.b.a.m(SourceFile:574)
    at org.andengine.engine.Engine$UpdateThread.run(SourceFile:870)

More options for alliance management

Some alliance tools would be nice for future...sort shortlists of entries by player, or date/time etc...tracking loans vs paid back or yet un-repaid...ticktock on last sign-on to point up players gone inactive. I favor a 2 month deadline to re-log or auto flag for kick.

SitrepActivity can result in too many queued tasks

The end result is the below exception. I'm not sure if the best solution is to just allow "infinite" (or at least, more) queued tasks, or to somehow limit the number of stars we try to fetch some other way.

java.util.concurrent.RejectedExecutionException: Task au.com.codeka.d@439ec898 rejected from java.util.concurrent.ThreadPoolExecutor@41cbfd58[Running, pool size = 20, active threads = 20, queued tasks = 250, completed tasks = 254]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1979)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:786)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1307)
    at au.com.codeka.BackgroundRunner.[execute|onComplete|access$100|access$200](SourceFile:88)
    at au.com.codeka.warworlds.model.StarManager.[clearCache|getStarSummary|getStarSummary|getStarSummaries$33f58d9f|notifyStarUpdated|refreshStar|refreshStarSummaries|renameStar|requestStar|access$200](SourceFile:178)
    at au.com.codeka.warworlds.model.ek.a(SourceFile:60)
    at au.com.codeka.warworlds.model.ek.a(SourceFile:50)
    at au.com.codeka.warworlds.game.SitrepActivity$SituationReportAdapter.getView(SourceFile:500)
    at android.widget.AbsListView.obtainView(AbsListView.java:2680)
    at android.widget.ListView.makeAndAddView(ListView.java:1838)
    at android.widget.ListView.fillDown(ListView.java:681)

Fleet merges not updating correctly

If you have, lets say, 3x 100 fighters at a colony. You select the first in the fleets screen and click merge. You select one of the 2x 100 other fighters. The list updates after a second, showing 200 fighters and 100 fighters.

The 200 fighters entry is still selected, if you click merge again it will show again 2x 100 fighters to merge (although there's only 1x 100 fighters present left now).

IllegalStateException in BuildActivity's PagerAdapter

Every place I've seen this, there's also another thread that's simulating a star. That seems suspicious and it could be that simulating the star at the same time as the UI thread is displaying the builds is causing a problem?

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 1, found: 0 Pager id: au.com.codeka.warworlds:id/pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class au.com.codeka.warworlds.game.build.k
    at android.support.v4.view.ViewPager.a(SourceFile:967)
    at android.support.v4.view.ViewPager.b(SourceFile:919)
    at android.support.v4.view.ViewPager.onMeasure(SourceFile:1441)
    at android.view.View.measure(View.java:16612)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
    at android.view.View.measure(View.java:16612)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16612)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16612)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
    at android.view.View.measure(View.java:16612)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2065)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1192)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1401)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1079)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5948)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    at android.view.Choreographer.doFrame(Choreographer.java:544)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5102)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

Another thread:

---------- THREAD: BackgroundRunner #4
   ...
   au.com.codeka.common.model.Simulation.simulateStepForAllEmpires(SourceFile:212)
   au.com.codeka.common.a.bc.a(SourceFile:129)
   au.com.codeka.warworlds.ctrl.BuildEstimateView$1.doInBackground(SourceFile:79)
   au.com.codeka.warworlds.ctrl.e.b(SourceFile:65)
   au.com.codeka.BackgroundRunner$2.call(SourceFile:66)
   java.util.concurrent.FutureTask.run(FutureTask.java:237)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   java.lang.Thread.run(Thread.java:841)

Tidy up libraries and depedencies

In particular, I think we should use Guava rather than Apache Commons, just because Guava is somewhat more modern. Hopefully Proguard will help to keep APK size down...

Add a mechanism to keep the database schema up-to-date

If someone updates the database schema, we don't want to have to manually get everyone to apply the same changes. It would also help in the initial setup process if the database is created automatically.

The easiest way to do this would be to keep a "schema version" table which includes a single integer describing the 'version' of the schema. Every time the server starts up, it checks the stored schema version against it's own, and if there's a difference it runs scripts to upgrade the schema.

It means we'll have to be vigilant about making sure any commits which update the database schema also include the scripts to upgrade other database instances.

This will also help with upgrading the schema on the production instance, because I won't have to worry about forgetting to update the database as well (that's happened before and caused annoying downtime...)

move select bug

When selecting a ship to move, the highlighted choice unselects and re-selects and highlights the ship at list bottom.

NullPointerException in StarfieldActivity

java.lang.RuntimeException: Unable to resume activity {au.com.codeka.warworlds/au.com.codeka.warworlds.game.starfield.StarfieldActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {au.com.codeka.warworlds/au.com.codeka.warworlds.game.starfield.StarfieldActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2944)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2973)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2408)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3910)
    at android.app.ActivityThread.access$700(ActivityThread.java:165)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5391)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {au.com.codeka.warworlds/au.com.codeka.warworlds.game.starfield.StarfieldActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3533)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2928)
    ... 13 more
Caused by: java.lang.NullPointerException
    at au.com.codeka.warworlds.game.starfield.StarfieldActivity.[openEmpireActivityAtFleet|applyBottomPaneAnimation|navigateToPlanet$513f7269|navigateToPlanet|navigateToFleet|showStarRenamePopup|access$000|access$002|access$402|access$800|access$1000$3a216234|access$1300](SourceFile:511)
    at au.com.codeka.warworlds.game.starfield.StarfieldActivity.onActivityResult(SourceFile:647)
    at android.app.Activity.dispatchActivityResult(Activity.java:5311)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3529)
    ... 14 more

crash and lag

every time I close and reopen app without restarting app it crashes or lags alot

Add role-based authentication to back end website

Currently the back end website just hard-codes access to my email address, and gives me full access to everything. That's not going to be useful if we want others to help with managing the game. We'll need some sort or role-based author where we can say PersonA can access the empire list but not chat, PersonB can access chat and ban people but can't do something else.

I'm not sure exactly what the roles should be, but initially we could start with a "read-only" role that letsnyou view things but not change it.

Access should also be controlled by database tables, instead of just hard-coding my email address in the code...

Zero fleets

Sometimes I notice fleets with zero ships. Mostly after fighting natives. Screenshot coming up.

NullPointerException in RequestVoteDialog

java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.codeka.warworlds/au.com.codeka.warworlds.game.alliance.AllianceActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2453)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4036)
    at android.app.ActivityThread.access$1000(ActivityThread.java:173)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5579)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at au.com.codeka.warworlds.game.alliance.RequestVoteDialog.refresh(SourceFile:107)
    at au.com.codeka.warworlds.game.alliance.ao.c(SourceFile:63)
    at android.support.v4.app.DialogFragment.[onDetach|getLayoutInflater](SourceFile:307)
    at android.support.v4.app.FragmentManagerImpl.[throwException|beginTransaction|putFragment|getFragment|saveFragmentInstanceState|dump|makeOpenCloseAnimation$376f30fd|makeFadeAnimation$424ea1bd|loadAnimation|moveToState|moveToState|addFragment|removeFragment|findFragmentById|findFragmentByTag|enqueueAction|allocBackStackIndex|setBackStackIndex|popBackStackState$68507953$44bd8ea3|restoreAllState|attachActivity|dispatchConfigurationChanged|dispatchCreateOptionsMenu|dispatchPrepareOptionsMenu|dispatchOptionsItemSelected](SourceFile:942)
    at android.support.v4.app.z.a(SourceFile:1121)
    at android.support.v4.app.z.e(SourceFile:1103)
    at android.support.v4.app.z.i(SourceFile:1901)
    at android.support.v4.app.FragmentActivity.onStart(SourceFile:567)
    at au.com.codeka.warworlds.game.alliance.AllianceActivity.onStart(SourceFile:86)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1177)
    at android.app.Activity.performStart(Activity.java:5461)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368)
    ... 12 more

crash and lag

every time I close and reopen app without restarting app it crashes or lags alot

Convert to protobuf nano or square/wire, and tidy up model objects

Android provides a library, protobuf nano, which would probably be better to use on the client than the heavy-weight protobuf library we use.

This should make the final .apk a bit smaller, but should also hopefully make the interface cleaner.

I'm not sure how this will work with the way we share "model" objects between the client and server, maybe it means the server will have to use protobuf nano as well. Some investigation will therefore be required. Using square/wire is another option I've looked into in the past, they generate nice small classes with a decent API as well.

The other thing that needs to be done is the model objects need to be tidied up quite a bit. The whole "BaseXxx" and then the sub class in the client/server which contains additional logic is pretty annoying in practice. If we choose to go with square/wire, then perhaps using the generated classes directly would be an option. The main difficulty would be the fact that the classes it generates are immutable (but that would actually have other benefits as well, it will just require a bit of extra work to get it working nicely.)

OutOfMemoryException in various places

I suspect this is more likely due to a memory leak somewhere, rather than anything in particular with the code. Here's one place I've seen it:

java.lang.RuntimeException: Unable to resume activity {au.com.codeka.warworlds/au.com.codeka.warworlds.game.solarsystem.SolarSystemActivity}: android.view.InflateException: Binary XML file line #132: Error inflating class au.com.codeka.warworlds.ctrl.ColonyFocusView
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3076)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3105)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.access$900(ActivityThread.java:175)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5602)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #132: Error inflating class au.com.codeka.warworlds.ctrl.ColonyFocusView
    at android.view.LayoutInflater.createView(LayoutInflater.java:626)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
    at au.com.codeka.warworlds.game.solarsystem.w.a(SourceFile:70)
    at android.support.v4.app.Fragment.b(SourceFile:1504)
    at android.support.v4.app.z.a(SourceFile:942)
    at android.support.v4.app.z.a(SourceFile:1121)
    at android.support.v4.app.l.run(SourceFile:682)
    at android.support.v4.app.z.d(SourceFile:1484)
    at android.support.v4.app.s.onPostResume(SourceFile:457)
    at android.support.v7.a.f.onPostResume(SourceFile:116)
    at au.com.codeka.warworlds.l.onPostResume(SourceFile:109)
    at android.app.Activity.performResume(Activity.java:5543)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3066)
    ... 12 more
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at android.view.LayoutInflater.createView(LayoutInflater.java:600)
    ... 31 more
Caused by: android.view.InflateException: Binary XML file line #111: Error inflating class <unknown>
    at android.view.LayoutInflater.createView(LayoutInflater.java:626)
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
    at android.view.View.inflate(View.java:18474)
    at au.com.codeka.warworlds.ctrl.ColonyFocusView.<init>(SourceFile:21)
    ... 34 more
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at android.view.LayoutInflater.createView(LayoutInflater.java:600)
    ... 43 more
Caused by: java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889)
    at android.content.res.Resources.loadDrawable(Resources.java:3436)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
    at android.widget.ImageView.<init>(ImageView.java:133)
    at android.widget.ImageView.<init>(ImageView.java:123)
    ... 46 more

Make a generic "ApiRequest" object so that we can do more advanced queuing and batching of requests

In issue #7, it becomes apparent that we need a better way to make requests to the server so that we don't end up with an enormous queue of hundreds of requests.

If we had a generic "ApiRequest" object that represented any request to the server, we could limit the number of threads connecting to the server in a more intelligent way and we'd also be able to batch up requests so that the server can parallelize them on the server and not just have one-per-thread on the client.

Queue tab is redundant

Of the tab trio, Buildings/Ships/Queue, Queue is redundant and adds an unnecessary extra step when doing a stop or accelerate. The running builds are listed at pane bottom for both Buildings, and Ships. It would be easier and faster to just tap a running build to stop or accelerate a job.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.