package com.nbs.client.assassins.views; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.googlecode.androidannotations.annotations.EFragment; import com.googlecode.androidannotations.annotations.SeekBarProgressChange; import com.googlecode.androidannotations.annotations.ViewById; import com.nbs.client.assassins.R; import com.nbs.client.assassins.utils.LocationUtils; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; import android.widget.TextView; @EFragment(R.layout.gameplay_dialog) public class CustomizeMatchFragment extends SherlockFragment { private static final String TAG = "GameplayFragment"; private GameplaySettingsListener mListener; public static final double FEET_PER_MILE = 5280.0f; public static final int DEFAULT_HUNT_RANGE = 520; //ft public static final int DEFAULT_ATTACK_RANGE = 200; //ft public static final int DEFAULT_ATTACK_DELAY = 180; //sec private static final int DONE_ID = 1; @ViewById(R.id.seekBarHuntRange) public SeekBar huntRange; @ViewById(R.id.seekBarAttackRange) public SeekBar attackRange; @ViewById(R.id.seekBarAttackDelay) public SeekBar delayAfterAttack; @ViewById(R.id.textViewHuntRangeValue) public TextView huntRangeValueText; @ViewById(R.id.textViewAttackRangeValue) public TextView attackRangeValueText; @ViewById(R.id.textViewAttackDelayValue) public TextView attackDelayValueText; public int huntRangeVal; public int attackRangeVal; public int delayAfterAttackVal; public interface GameplaySettingsListener { public void onGameplaySettingsFinished(int waitAfterHit, double huntRange, double attackRange); public void onGameplaySettingsCancelled(); } public CustomizeMatchFragment(){} @Override public void onAttach(Activity activity) { super.onAttach(activity); if(activity instanceof GameplaySettingsListener){ mListener = (GameplaySettingsListener) activity; } else { throw new ClassCastException(activity.toString() + " must implement GameplaySettingsListener"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); setMenuVisibility(true); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { huntRangeVal = DEFAULT_HUNT_RANGE; attackRangeVal = DEFAULT_ATTACK_RANGE; delayAfterAttackVal = DEFAULT_ATTACK_DELAY; attackRange.setProgress(attackRangeVal); huntRange.setProgress(huntRangeVal); delayAfterAttack.setProgress(delayAfterAttackVal); super.onViewCreated(view, savedInstanceState); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Log.d(TAG, "onCreateOptionsMenu()"); menu.add(Menu.NONE, DONE_ID, Menu.FIRST, "Done") .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case DONE_ID: mListener.onGameplaySettingsFinished( getAttackDelay(), getHuntRangeMiles(), getAttackRangeMiles()); return true; } return super.onOptionsItemSelected(item); } @SeekBarProgressChange(R.id.seekBarHuntRange) void onHuntRangeChanged(SeekBar seekBar, int progress, boolean fromUser) { huntRangeValueText.setText(progress + " ft"); huntRangeVal = progress; //attack range must be lower than hunt range int currAttackVal = attackRange.getProgress(); attackRange.setMax((huntRange.getProgress() > 0) ? huntRange.getProgress() -1 : 0); attackRange.setProgress(currAttackVal); //force onProgressChange to be called to keep it in sync with hunt range if(currAttackVal < attackRange.getMax()) { attackRange.incrementProgressBy(1); attackRange.incrementProgressBy(-1); } } @SeekBarProgressChange(R.id.seekBarAttackRange) void onAttackRangeChanged(SeekBar seekBar, int progress, boolean fromUser) { attackRangeValueText.setText(progress + " ft"); attackRangeVal = progress; } @SeekBarProgressChange(R.id.seekBarAttackDelay) void onAttackDelayChanged(SeekBar seekBar, int progress, boolean fromUser) { attackDelayValueText.setText(progress + " sec"); delayAfterAttackVal = progress; } public double getHuntRangeMiles() { return LocationUtils.roundDouble(((double)huntRangeVal)/FEET_PER_MILE); } public void setHuntRange(int huntRangeVal) { this.huntRangeVal = huntRangeVal; } public double getAttackRangeMiles() { return LocationUtils.roundDouble(((double)attackRangeVal)/FEET_PER_MILE); } public void setAttackRange(int attackRangeVal) { this.attackRangeVal = attackRangeVal; } public int getAttackDelay() { return delayAfterAttackVal; } public void setAttackDelay(int delayAfterAttackVal) { this.delayAfterAttackVal = delayAfterAttackVal; } }