working livedata on craft
continuous-integration/drone/push Build is passing Details

livedata
Lucas Delanier 2 years ago
parent 043dd9ca4f
commit 245ff1bffd

@ -17,6 +17,7 @@ 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
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -63,7 +64,10 @@ class BossFragment() : Fragment() {
setUpRecyclerView(view)
// Set up accelerometer listener
setUpAccelerometerListener(view, viewModel.currentPlayer)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
// Set up activity orientation
setUpActivityOrientation()

@ -17,6 +17,7 @@ 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
@ -53,7 +54,12 @@ class CollectFragment() : Fragment() {
initializeViews(view)
// Set up accelerometer listener
setUpAccelerometerListener(view,viewModel.currentPlayer)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
// Set up activity orientation
setUpActivityOrientation()

@ -9,6 +9,7 @@ import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -29,7 +30,7 @@ class CraftFragment : Fragment() {
private lateinit var buttonForgeMax: Button
private lateinit var numberCraftable: TextView
private lateinit var craftValue : TextView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
private val viewModel : MainViewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) {
@ -45,8 +46,12 @@ class CraftFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_craft, container, false)
recipe = arguments?.getParcelable("recipe")!!
initializeViews(view, viewModel.currentPlayer)
setUpRecyclerView(view,viewModel.currentPlayer)
viewModel.currentPlayer.observe(this.viewLifecycleOwner, Observer {player ->
initializeViews(view, player)
setUpRecyclerView(view, player)
})
return view
}
@ -85,14 +90,10 @@ class CraftFragment : Fragment() {
craftValue.text = recipe.item.stack.toString()
buttonForge.setOnClickListener{
currentPlayer.craft(recipe)
initializeViews(view, currentPlayer)
setUpRecyclerView(view, currentPlayer)
viewModel.craft(recipe)
}
buttonForgeMax.setOnClickListener{
currentPlayer.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer))
initializeViews(view, currentPlayer)
setUpRecyclerView(view, currentPlayer)
}

@ -12,6 +12,7 @@ import android.widget.ProgressBar
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Player
@ -46,7 +47,11 @@ class HomeFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_home,container,false)
// Initialize views
initializeViews(view, viewModel.currentPlayer, isRaining)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
initializeViews(view, it, isRaining)
})
return view
}

@ -6,6 +6,7 @@ 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
@ -23,15 +24,18 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
}
override fun onItemLongClick(position: Int) {
if (viewModel.currentPlayer.items[position] is Tool) {
val text = if (viewModel.currentPlayer.equipeItem(viewModel.currentPlayer.items[position]) ) " was well equipped" else " has been well unequipped"
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"
Toast.makeText(
context,
viewModel.currentPlayer.items[position].type.name + text,
it.items[position].type.name + text,
Toast.LENGTH_SHORT
).show()
setUpRecyclerView(view?.parent as ViewGroup, this)
}
})
}
override fun onCreateView(
@ -46,11 +50,18 @@ 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(viewModel.currentPlayer.items, listener , viewModel.currentPlayer)
adapter = AdapterInventory(
it.items,
listener,
it
)
}
})
}

@ -4,21 +4,18 @@ import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController
import com.example.shakecraft.services.OpenWeatherMapService
import com.example.shakecraft.viewmodel.MainViewModel
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.coroutines.*
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
@ -26,8 +23,7 @@ import retrofit2.converter.gson.GsonConverterFactory
class MainActivity: AppCompatActivity() {
var isRaining = false
private lateinit var viewModel: MainViewModel
private val model: MainViewModel by viewModels()
@RequiresApi(Build.VERSION_CODES.R)
private fun hideSystemUI() {
@ -48,8 +44,6 @@ class MainActivity: AppCompatActivity() {
super.onCreate(savedInstanceState)
hideSystemUI()
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
val apiKey = "85a2724ad38b3994c2b7ebe1d239bbff"
val cityName = "Clermont-Ferrand"
@ -60,10 +54,8 @@ class MainActivity: AppCompatActivity() {
val openWeatherMapService = retrofit.create(OpenWeatherMapService::class.java)
GlobalScope.launch(Dispatchers.Main) {
val weatherResponse = withContext(Dispatchers.IO) {
openWeatherMapService.getCurrentWeather(cityName, apiKey)
}
CoroutineScope(Dispatchers.IO).launch {
val weatherResponse = openWeatherMapService.getCurrentWeather(cityName, apiKey)
isRaining =
weatherResponse.weather.any { it.main.contains("rain", ignoreCase = true) }

@ -1,13 +1,21 @@
package com.example.shakecraft.viewmodel
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.Player
import com.example.shakecraft.model.Recipe
class MainViewModel : ViewModel() {
var currentPlayer : Player = Stub().load()
var currentPlayer = MutableLiveData(Stub().load())
lateinit var currentBoss : Boss
val isBossInitialized get() = this::currentBoss.isInitialized
fun craft(recipe : Recipe){
currentPlayer.value?.craft(recipe)
currentPlayer.value = currentPlayer.value
}
}
Loading…
Cancel
Save