From 640950bc5074809827dc43c82cf3a1a986a21f2c Mon Sep 17 00:00:00 2001 From: Lucas Delanier Date: Fri, 31 Mar 2023 21:29:36 +0200 Subject: [PATCH] save the currentboss in tthe viewmodel :tada: --- .../com/example/shakecraft/BossFragment.kt | 26 +++++++++---------- .../shakecraft/viewmodel/MainViewModel.kt | 2 ++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt index 3bd23cd..55699ce 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt @@ -39,7 +39,6 @@ class BossFragment() : Fragment() { private lateinit var image: ImageView private lateinit var buttonCollect: TextView private lateinit var recyclerView: RecyclerView - private lateinit var boss: Boss val viewModel : MainViewModel by activityViewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -56,8 +55,9 @@ class BossFragment() : Fragment() { initializeViews(view) // Set up boss - boss = Generator.generateBoss() - setUpBoss(boss) + if(viewModel.currentBoss == null) + viewModel.currentBoss = Generator.generateBoss() + setUpBoss(viewModel.currentBoss!!) // Set up RecyclerView for boss loot setUpRecyclerView(view) @@ -104,7 +104,7 @@ class BossFragment() : Fragment() { recyclerView = view.findViewById(R.id.recyclerviewBossLoot) with(recyclerView) { layoutManager = LinearLayoutManager(view.context) - adapter = AdapterBossLoot(boss.possibleLoot) + adapter = AdapterBossLoot(viewModel.currentBoss?.possibleLoot!!) } } private fun setUpActivityOrientation(){ @@ -119,7 +119,7 @@ class BossFragment() : Fragment() { toastView.visibility = View.VISIBLE lootImage.setImageResource(item.type.image) lootName.text = item.type.name - xpReward.text = boss.xpReward.toString() + xpReward.text = viewModel.currentBoss?.xpReward.toString() toastView.postDelayed({ toastView.visibility = View.GONE }, 3000) @@ -133,35 +133,35 @@ class BossFragment() : Fragment() { } override fun onSensorChanged(event: SensorEvent?) { val acceleration = sqrt(event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2)) - if (boss.life <= 0) { + if (viewModel.currentBoss?.life!! <= 0) { //Vibration to signal the death of the boss val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator vibrator.vibrate(100) // Generate a loot item and XP reward - val item = Generator.generateLootBoss(boss.possibleLoot) + val item = Generator.generateLootBoss(viewModel.currentBoss!!.possibleLoot) currentPlayer.addItem(item) - currentPlayer.gainXp(boss.xpReward) + currentPlayer.gainXp(viewModel.currentBoss!!.xpReward) // Show loot toast view for 3 seconds displayToast(view,item) // Spawn new boss and reset progress bar - boss = Generator.generateBoss() - setUpBoss(boss) + viewModel.currentBoss = Generator.generateBoss() + setUpBoss(viewModel.currentBoss!!) //Update displayed information setUpRecyclerView(view) } else { if(acceleration > 20){ - boss.takeDamage(((acceleration / 80)+ currentPlayer.attack()/100).toDouble()) + viewModel.currentBoss!!.takeDamage(((acceleration / 80)+ currentPlayer.attack()/100).toDouble()) } else{ - boss.takeDamage(currentPlayer.attack().toDouble()/100) + viewModel.currentBoss!!.takeDamage(currentPlayer.attack().toDouble()/100) } - progressBar.progress = boss.life.toInt() + progressBar.progress = viewModel.currentBoss!!.life.toInt() } } diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/viewmodel/MainViewModel.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/viewmodel/MainViewModel.kt index 3bbce16..cfaec16 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/viewmodel/MainViewModel.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/viewmodel/MainViewModel.kt @@ -2,9 +2,11 @@ package com.example.shakecraft.viewmodel import androidx.lifecycle.ViewModel import com.example.shakecraft.data.Stub +import com.example.shakecraft.model.Boss import com.example.shakecraft.model.Player class MainViewModel : ViewModel() { var currentPlayer : Player = Stub().load() + var currentBoss : Boss? = null } \ No newline at end of file