diff --git a/ShakeAndCraft/app/build.gradle b/ShakeAndCraft/app/build.gradle index 1f4959e..89af304 100644 --- a/ShakeAndCraft/app/build.gradle +++ b/ShakeAndCraft/app/build.gradle @@ -49,6 +49,8 @@ dependencies { implementation 'com.google.ar.sceneform:filament-android:1.17.1' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' + + implementation 'androidx.fragment:fragment-ktx:1.5.6' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 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 1e04030..3bd23cd 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/BossFragment.kt @@ -16,6 +16,7 @@ import android.view.animation.ScaleAnimation import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -24,6 +25,7 @@ import com.example.shakecraft.model.Generator import com.example.shakecraft.model.Item import com.example.shakecraft.model.Player import com.example.shakecraft.view.adapter.AdapterBossLoot +import com.example.shakecraft.viewmodel.MainViewModel import kotlin.math.pow import kotlin.math.sqrt @@ -38,6 +40,7 @@ class BossFragment() : Fragment() { 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?) { super.onCreate(savedInstanceState) @@ -47,7 +50,6 @@ class BossFragment() : Fragment() { savedInstanceState: Bundle? ): View? { - val currentPlayer = (activity as MainActivity).currentPlayer val view = inflater.inflate(R.layout.fragment_boss, container, false) // Initialize views @@ -61,7 +63,7 @@ class BossFragment() : Fragment() { setUpRecyclerView(view) // Set up accelerometer listener - setUpAccelerometerListener(view, currentPlayer) + setUpAccelerometerListener(view, viewModel.currentPlayer) // Set up activity orientation setUpActivityOrientation() diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt index bbb8ab6..b8c88ce 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt @@ -16,12 +16,14 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import com.example.shakecraft.model.Generator import com.example.shakecraft.model.Item import com.example.shakecraft.model.Player +import com.example.shakecraft.viewmodel.MainViewModel import kotlin.math.pow @@ -34,6 +36,7 @@ class CollectFragment() : Fragment() { private lateinit var accelerometerEventListener: SensorEventListener private lateinit var progressBar: ProgressBar private lateinit var buttonBack: TextView + val viewModel : MainViewModel by activityViewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -44,14 +47,13 @@ class CollectFragment() : Fragment() { savedInstanceState: Bundle? ): View? { - val currentPlayer = (activity as MainActivity).currentPlayer val view = inflater.inflate(R.layout.fragment_collect, container, false) // Initialize views initializeViews(view) // Set up accelerometer listener - setUpAccelerometerListener(view,currentPlayer) + setUpAccelerometerListener(view,viewModel.currentPlayer) // Set up activity orientation setUpActivityOrientation() diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CraftFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CraftFragment.kt index ad53829..602686b 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CraftFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CraftFragment.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.Button import android.widget.ImageView import android.widget.TextView +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -15,7 +16,7 @@ import com.example.shakecraft.model.Player import com.example.shakecraft.model.Recipe import com.example.shakecraft.model.RecipeManager import com.example.shakecraft.view.adapter.AdapterMaterials - +import com.example.shakecraft.viewmodel.MainViewModel class CraftFragment : Fragment() { @@ -26,6 +27,7 @@ class CraftFragment : Fragment() { private lateinit var name: TextView private lateinit var buttonForge: Button private lateinit var numberCraftable: TextView + val viewModel : MainViewModel by activityViewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -38,12 +40,11 @@ class CraftFragment : Fragment() { ): View? { - val currentPlayer = (activity as MainActivity).currentPlayer val view = inflater.inflate(R.layout.fragment_craft, container, false) recipe = arguments?.getParcelable("recipe")!! - initializeViews(view, currentPlayer) - setUpRecyclerView(view,currentPlayer) + initializeViews(view, viewModel.currentPlayer) + setUpRecyclerView(view,viewModel.currentPlayer) return view } diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt index 39aa1cc..ad9ebcf 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt @@ -15,6 +15,7 @@ import com.example.shakecraft.model.RecipeManager import com.example.shakecraft.view.adapter.AdapterRecipe + class ForgeFragment : Fragment(), AdapterRecipe.OnItemClickListener { private lateinit var buttonBack: TextView private lateinit var recyclerViewObjects: RecyclerView diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt index 20265f2..81021f5 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt @@ -11,9 +11,11 @@ import android.widget.ImageView import android.widget.ProgressBar import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.activityViewModels import androidx.navigation.NavOptions import androidx.navigation.fragment.findNavController import com.example.shakecraft.model.Player +import com.example.shakecraft.viewmodel.MainViewModel class HomeFragment : Fragment() { @@ -29,6 +31,7 @@ class HomeFragment : Fragment() { private lateinit var playermage : ImageView private lateinit var equipeditem: ImageView private lateinit var eventFishing: ImageView + val viewModel : MainViewModel by activityViewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -39,12 +42,11 @@ class HomeFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - val currentPlayer = (activity as MainActivity).currentPlayer val isRaining = (activity as MainActivity).isRaining val view = inflater.inflate(R.layout.fragment_home,container,false) // Initialize views - initializeViews(view, currentPlayer, isRaining) + initializeViews(view, viewModel.currentPlayer, isRaining) return view } diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/InventoryFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/InventoryFragment.kt index 343e33a..2350af6 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/InventoryFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/InventoryFragment.kt @@ -5,34 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.example.shakecraft.model.Player import com.example.shakecraft.model.Tool import com.example.shakecraft.view.adapter.AdapterInventory +import com.example.shakecraft.viewmodel.MainViewModel class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListener { - private lateinit var currentPlayer: Player private lateinit var recyclerView: RecyclerView + val viewModel : MainViewModel by activityViewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onItemLongClick(position: Int) { - if(currentPlayer.items[position] is Tool) { - if (currentPlayer.equipeItem(currentPlayer.items[position]) == true) + if(viewModel.currentPlayer.items[position] is Tool) { + if (viewModel.currentPlayer.equipeItem(viewModel.currentPlayer.items[position]) == true) Toast.makeText( context, - currentPlayer.items[position].type.name + " was well equipped", + viewModel.currentPlayer.items[position].type.name + " was well equipped", Toast.LENGTH_SHORT ).show() else Toast.makeText( context, - currentPlayer.items[position].type.name + " has been well unequipped", + viewModel.currentPlayer.items[position].type.name + " has been well unequipped", Toast.LENGTH_SHORT ).show() setUpRecyclerView(view?.parent as ViewGroup, this) @@ -43,7 +45,6 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - currentPlayer = (activity as MainActivity).currentPlayer val view = inflater.inflate(R.layout.fragment_inventory, container, false) // Initialize views @@ -55,9 +56,10 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene recyclerView = view.findViewById(R.id.recyclerviewInventory) with(recyclerView) { layoutManager = LinearLayoutManager(view.context) - adapter = AdapterInventory(currentPlayer.items, listener , currentPlayer) + adapter = AdapterInventory(viewModel.currentPlayer.items, listener , viewModel.currentPlayer) } } + } \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt index de17953..681b076 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt @@ -8,11 +8,12 @@ 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.data.Stub 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 @@ -24,8 +25,8 @@ import retrofit2.converter.gson.GsonConverterFactory class MainActivity: AppCompatActivity() { - var currentPlayer = Stub().load() var isRaining = false + private lateinit var viewModel: MainViewModel @RequiresApi(Build.VERSION_CODES.R) @@ -47,6 +48,7 @@ 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" @@ -102,4 +104,5 @@ class MainActivity: AppCompatActivity() { + } \ No newline at end of file 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 new file mode 100644 index 0000000..3bbce16 --- /dev/null +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/viewmodel/MainViewModel.kt @@ -0,0 +1,10 @@ +package com.example.shakecraft.viewmodel + +import androidx.lifecycle.ViewModel +import com.example.shakecraft.data.Stub +import com.example.shakecraft.model.Player + +class MainViewModel : ViewModel() { + + var currentPlayer : Player = Stub().load() +} \ No newline at end of file