Skip to content

Commit

Permalink
#15: Animations for Input & Limitations
Browse files Browse the repository at this point in the history
  • Loading branch information
Entreco committed Dec 4, 2017
1 parent 8e69d04 commit f2b270b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,42 @@
package nl.entreco.dartsscorecard.play.input

import android.databinding.BindingAdapter
import android.graphics.drawable.AnimatedVectorDrawable
import android.support.design.widget.FloatingActionButton
import android.view.View
import android.widget.TextView
import nl.entreco.domain.play.model.Turn

/**
* Created by Entreco on 02/12/2017.
*/
class InputBindings {


companion object {
private val DEFAULT_ANIMATION_TIME: Long = 150
@JvmStatic
@BindingAdapter("scoreInput")
fun showScore(view: TextView, scoreInput: String) {
view.text = scoreInput
}

@JvmStatic
@BindingAdapter("backAnimation")
fun backAnimation(view: View, scoreInput: String) {
if (scoreInput.isEmpty()) {
view.animate().scaleX(0f).scaleY(0f).setDuration(DEFAULT_ANIMATION_TIME).start()
} else {
view.animate().scaleX(1f).scaleY(1f).setDuration(DEFAULT_ANIMATION_TIME).start()
}
}

@JvmStatic
@BindingAdapter("fabAnimation")
fun fabAnimation(view: FloatingActionButton, turn: Turn) {
if(view.drawable is AnimatedVectorDrawable){

}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,16 @@ open class InputViewModel @Inject constructor(private val analytics: Analytics)
val current = ObservableField<Player>(NoPlayer())
val scoredTxt = ObservableField<String>("")
val nextDescription = ObservableInt(R.string.empty)
var count = 0

private val estimator = ScoreEstimator()
private var turn = Turn()
private var nextUp: Next? = null

fun entered(score: Int) {
scoredTxt.set(scoredTxt.get().plus(score.toString()))
val oldValue = scoredTxt.get()
if(oldValue.length < 3) {
scoredTxt.set(oldValue.plus(score.toString()))
}
}

fun back() {
Expand All @@ -54,40 +57,40 @@ open class InputViewModel @Inject constructor(private val analytics: Analytics)
clearScoreInput()
}

private fun gameIsFinished() = nextUp == null || nextUp?.state == State.MATCH

private fun parseScore(input: TextView): Int {
return try {
input.text.toString().toInt()
input.toString().toInt()
} catch (err: Exception) {
0
}
}

private fun submitDart(dart: Dart, listener: InputListener) {
turn += dart
when {
lastDart() -> {
turn += dart
listener.onDartThrown(turn.copy(), nextUp?.player!!)
submit(turn.copy(), listener)
turn = Turn()
}
else -> {
turn += dart
listener.onDartThrown(turn.copy(), nextUp?.player!!)
}
}
count++
}

private fun submit(turn: Turn, listener: InputListener) {
count = 0
scoredTxt.set(turn.total().toString())
listener.onTurnSubmitted(turn.copy(), nextUp?.player!!)
analytics.trackAchievement("scored: $turn")

this.scoredTxt.set(turn.total().toString())
this.analytics.trackAchievement("scored: $turn")
this.turn = Turn()
}

private fun lastDart() = count % 3 == 2
private fun clearScoreInput() {
scoredTxt.set("")
}

private fun lastDart() = turn.dartsLeft() <= 0

override fun onNext(next: Next) {
clearScoreInput()
Expand All @@ -97,7 +100,7 @@ open class InputViewModel @Inject constructor(private val analytics: Analytics)
}

private fun descriptionFromNext(next: Next): Int {
return when(next.state) {
return when (next.state) {
State.START -> R.string.game_on
State.LEG -> R.string.to_throw_first
State.SET -> R.string.to_throw_first
Expand All @@ -106,7 +109,5 @@ open class InputViewModel @Inject constructor(private val analytics: Analytics)
}
}

private fun clearScoreInput() {
scoredTxt.set("")
}
private fun gameIsFinished() = nextUp == null || nextUp?.state == State.MATCH
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:onClick="@{() -> viewModel.back()}" />
android:onClick="@{() -> viewModel.back()}"
app:backAnimation="@{viewModel.scoredTxt}"/>

<TextView
android:id="@+id/input_score"
Expand Down Expand Up @@ -189,6 +190,7 @@
android:layout_margin="16dp"
android:onClick="@{() -> viewModel.tryToSubmit(inputScore, listener)}"
android:src="@drawable/ic_dart"
app:fabAnimation="@{viewModel.turn}"
fab:useCompatPadding="true"
fab:fabSize="normal" />

Expand Down
3 changes: 1 addition & 2 deletions android/DartsScorecard/app/src/main/res/values/styles_01.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
<style name="Input">
<item name="android:textAllCaps">true</item>
<item name="android:textSize">20sp</item>
<item name="android:maxLines">1</item>
<item name="android:textColor">?attr/scoreText</item>
<item name="android:fontFamily">sans-serif-condensed</item>
</style>
Expand Down Expand Up @@ -109,8 +110,6 @@
<item name="android:paddingStart">@dimen/def</item>
<item name="android:paddingEnd">@dimen/def</item>
<item name="android:textSize">28sp</item>
<item name="android:maxLength">3</item>
<item name="android:ems">3</item>
<item name="android:gravity">end</item>
<item name="android:textColor">?attr/ptsText</item>
</style>
Expand Down

0 comments on commit f2b270b

Please sign in to comment.