livedata and observer on needed fragments

livedata
Lucas Delanier 2 years ago
parent 245ff1bffd
commit 20df5325ab

@ -17,7 +17,6 @@ import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
@ -54,12 +53,7 @@ class CollectFragment() : Fragment() {
initializeViews(view)
// Set up accelerometer listener
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
viewModel.currentPlayer.value?.let { setUpAccelerometerListener(view, it) }
// Set up activity orientation
setUpActivityOrientation()
@ -109,7 +103,7 @@ class CollectFragment() : Fragment() {
// Generate a resource item and XP reward
val item = Generator.generateLootCollection()
currentPlayer.addItem(item)
viewModel.addItem(item)
currentPlayer.gainXp(item.type.xpReward)
//reset to 0 the progress bar

@ -93,7 +93,7 @@ class CraftFragment : Fragment() {
viewModel.craft(recipe)
}
buttonForgeMax.setOnClickListener{
currentPlayer.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer))
viewModel.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer))
}

@ -6,7 +6,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Tool
@ -24,18 +23,15 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
}
override fun onItemLongClick(position: Int) {
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
if (it.items[position] is Tool) {
val text = if (it.equipeItem(it.items[position]) ) " was well equipped" else " has been well unequipped"
if (viewModel.currentPlayer.value!!.items[position] is Tool) {
val text = if (viewModel.equipeItem(viewModel.currentPlayer.value!!.items[position]) ) " was well equipped" else " has been well unequipped"
Toast.makeText(
context,
it.items[position].type.name + text,
viewModel.currentPlayer.value!!.items[position].type.name + text,
Toast.LENGTH_SHORT
).show()
setUpRecyclerView(view?.parent as ViewGroup, this)
}
})
}
override fun onCreateView(
@ -50,18 +46,15 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
return view
}
private fun setUpRecyclerView(view: View,listener: AdapterInventory.OnItemLongClickListener ) {
recyclerView = view.findViewById(R.id.recyclerviewInventory)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
adapter = AdapterInventory(
it.items,
listener,
adapter = viewModel.currentPlayer.value?.let {
AdapterInventory(viewModel.currentPlayer.value!!.items, listener ,
it
)
}
})
}
}

@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.example.shakecraft.data.Stub
import com.example.shakecraft.model.Boss
import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Recipe
class MainViewModel : ViewModel() {
@ -14,8 +15,25 @@ class MainViewModel : ViewModel() {
lateinit var currentBoss : Boss
val isBossInitialized get() = this::currentBoss.isInitialized
fun craft(recipe : Recipe){
currentPlayer.value?.craft(recipe)
fun craft(recipe : Recipe, count : Int = 1){
currentPlayer.value?.craft(recipe, count)
currentPlayer.value = currentPlayer.value
}
fun addItem(item: Item) {
currentPlayer.value?.addItem(item)
currentPlayer.value = currentPlayer.value
}
fun gainXp(xpReward: Int) {
currentPlayer.value?.gainXp(xpReward)
currentPlayer.value = currentPlayer.value
}
fun equipeItem(item: Item): Boolean {
currentPlayer.value?.equipeItem(item)
currentPlayer.value = currentPlayer.value
return true
}
}
Loading…
Cancel
Save