Clean the code in function for better maintenance 💅

SQLite
Lucas Delanier 2 years ago
parent 64011ba3a0
commit 7c4b6cb148

@ -19,7 +19,10 @@ import android.widget.TextView
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Boss
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 kotlin.math.pow
import kotlin.math.sqrt
@ -27,38 +30,61 @@ import kotlin.math.sqrt
class BossFragment() : Fragment() {
private lateinit var sensorManager: SensorManager
private lateinit var accelerometer: Sensor
private lateinit var accelerometerEventListener: SensorEventListener
private lateinit var progressBar: ProgressBar
private lateinit var image: ImageView
private lateinit var buttonCollect: TextView
private lateinit var recyclerView: RecyclerView
private lateinit var boss: Boss
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val player = (activity as MainActivity).currentPlayer
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_boss, container, false)
val buttonCollect = view.findViewById<TextView>(R.id.backbutton)
// Initialize views
initializeViews(view)
// Set up boss
boss = Generator.generateBoss()
setUpBoss(boss)
// Set up RecyclerView for boss loot
setUpRecyclerView(view)
// Set up accelerometer listener
setUpAccelerometerListener(view, currentPlayer)
// Set up activity orientation
setUpActivityOrientation()
// Return fragment view
return view
}
private fun initializeViews(view: View) {
progressBar = view.findViewById(R.id.progressBar)
image = view.findViewById(R.id.imageBoss)
buttonCollect = view.findViewById<TextView>(R.id.backbutton)
buttonCollect.setOnClickListener{
findNavController().navigate(R.id.action_bossFragment_to_homeFragment)
}
val imageView = view.findViewById<ImageView>(R.id.imageBoss)
imageView.scaleX = 1.2f
imageView.scaleY = 1.2f
}
private fun setUpBoss(boss: Boss) {
progressBar.max = boss.maxlife
progressBar.progress = boss.life
image.setImageResource(boss.image)
// Créez une animation qui modifie la propriété scaleX et scaleY de l'image
// Create scale animation for boss image
val scaleAnimation = ScaleAnimation(
1.2f, // de 2.0 à 1.0
1.2f, // from 1.2 to 1.0
1.0f,
1.2f,
1.0f,
@ -67,110 +93,84 @@ class BossFragment() : Fragment() {
Animation.RELATIVE_TO_SELF,
0.5f
)
scaleAnimation.duration = 1000 // dure 1 seconde
scaleAnimation.repeatCount = Animation.INFINITE // répéter indéfiniment
scaleAnimation.repeatMode = Animation.REVERSE // inverser la direction de l'animation
// Appliquez l'animation à l'image
imageView.startAnimation(scaleAnimation)
progressBar = view.findViewById(R.id.progressBar)
sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
var boss = Generator.generateBoss()
progressBar.max = boss.maxlife
progressBar.progress = boss.life
imageView.setImageResource(boss.image)
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerviewBossLoot)
scaleAnimation.duration = 1000 // lasts 1 second
scaleAnimation.repeatCount = Animation.INFINITE // repeat indefinitely
scaleAnimation.repeatMode = Animation.REVERSE // reverse animation direction
image.startAnimation(scaleAnimation)
}
private fun setUpRecyclerView(view: View) {
recyclerView = view.findViewById(R.id.recyclerviewBossLoot)
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
adapter = AdapterBossLoot(boss.possibleLoot)
}
// Créez un écouteur de capteur d'accéléromètre pour écouter les secousses
}
private fun setUpActivityOrientation(){
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
private fun displayToast(view: View, item: Item){
val toastView = view.findViewById<View>(R.id.toast)
val lootImage = toastView.findViewById<ImageView>(R.id.imageViewLoot)
val lootName = toastView.findViewById<TextView>(R.id.nameLoot)
val xpReward = toastView.findViewById<TextView>(R.id.xpRewarded)
toastView.visibility = View.VISIBLE
lootImage.setImageResource(item.image)
lootName.text = item.name
xpReward.text = boss.xpReward.toString()
toastView.postDelayed({
toastView.visibility = View.GONE
}, 3000)
}
private fun setUpAccelerometerListener(view: View, currentPlayer: Player) {
sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
accelerometerEventListener = object : SensorEventListener {
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
// Ne faites rien ici
// Do nothing
}
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){
val item = Generator.generateLootBoss(boss.possibleLoot)
println(item)
player.addItem(item)
player.gainXp(boss.xpReward)
val maVue = view.findViewById<View>(R.id.toast)
val image = maVue.findViewById<ImageView>(R.id.imageViewLoot)
val name = maVue.findViewById<TextView>(R.id.nameLoot)
val xp = maVue.findViewById<TextView>(R.id.xpRewarded)
maVue.visibility = View.VISIBLE
image.setImageResource(item.image)
name.text = item.name
xp.text = boss.xpReward.toString()
maVue.postDelayed({
maVue.visibility = View.GONE
}, 3000)
boss = Generator.generateBoss()
println(boss)
imageView.setImageResource(boss.image)
val acceleration = sqrt(event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2))
if (boss.life <= 0) {
//Vibration to signal the death of the boss
val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrator.vibrate(100)
progressBar.max = boss.maxlife
progressBar.progress = boss.life
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
adapter = AdapterBossLoot(boss.possibleLoot)
}
// Définissez la propriété scaleX et scaleY de l'image sur 0.5f
// Generate a loot item and XP reward
val item = Generator.generateLootBoss(boss.possibleLoot)
currentPlayer.addItem(item)
currentPlayer.gainXp(boss.xpReward)
// Show loot toast view for 3 seconds
displayToast(view,item)
// Spawn new boss and reset progress bar
boss = Generator.generateBoss()
setUpBoss(boss)
//Update displayed information
setUpRecyclerView(view)
}
if (acceleration > 40) {
boss.takeDamage((acceleration/80).toInt())
} else {
// Reduce boss life based on acceleration value
boss.takeDamage((acceleration / 80).toInt())
progressBar.progress = boss.life
}
}
}
// Register accelerometer sensor earphone with manager
sensorManager.registerListener(
accelerometerEventListener,
accelerometer,
SensorManager.SENSOR_DELAY_GAME
)
return view
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onDestroy() {
super.onDestroy()
// Désenregistrez l'écouteur de capteur d'accéléromètre lorsque le fragment est détruit
// Unregister the accelerometer sensor listener when the fragment is destroyed
sensorManager.unregisterListener(accelerometerEventListener)
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED

@ -1,6 +1,6 @@
package com.example.shakecraft
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.ActivityInfo
import android.hardware.Sensor
@ -20,6 +20,9 @@ import android.widget.TextView
import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Generator
import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Player
import kotlin.math.pow
import kotlin.math.sqrt
@ -30,101 +33,102 @@ class CollectFragment() : Fragment() {
private lateinit var accelerometer: Sensor
private lateinit var accelerometerEventListener: SensorEventListener
private lateinit var progressBar: ProgressBar
private lateinit var buttonCollect: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val player = (activity as MainActivity).currentPlayer
// Récupérez une référence à la ProgressBar dans la vue
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)
// Set up activity orientation
setUpActivityOrientation()
val buttonCollect = view.findViewById<TextView>(R.id.backbutton)
// Return fragment view
return view
}
private fun initializeViews(view: View) {
progressBar = view.findViewById(R.id.progressBar)
buttonCollect = view.findViewById<TextView>(R.id.backbutton)
buttonCollect.setOnClickListener{
findNavController().navigate(R.id.action_collectFragment_to_homeFragment)
}
progressBar = view.findViewById(R.id.progressBar)
}
private fun setUpActivityOrientation(){
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
private fun displayToast(view: View, item: Item){
val maVue = view.findViewById<View>(R.id.toast)
val image = maVue.findViewById<ImageView>(R.id.imageViewLoot)
val name = maVue.findViewById<TextView>(R.id.nameLoot)
val xp = maVue.findViewById<TextView>(R.id.xpRewarded)
maVue.visibility = View.VISIBLE
image.setImageResource(item.image)
name.text = item.name
xp.text = item.xpReward.toString()
maVue.postDelayed({
maVue.visibility = View.GONE
}, 3000)
}
private fun setUpAccelerometerListener(view: View, currentPlayer: Player) {
sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
// Créez un écouteur de capteur d'accéléromètre pour écouter les secousses
accelerometerEventListener = object : SensorEventListener {
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
// Ne faites rien ici
// Do nothing
}
@SuppressLint("ServiceCast")
override fun onSensorChanged(event: SensorEvent?) {
val acceleration = sqrt(
event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2)
)
val acceleration = sqrt(event!!.values[0].pow(2) + event.values[1].pow(2) + event.values[2].pow(2))
if(progressBar.progress == 100){
val item = Generator.generateLootCollection()
println(item)
player.addItem(item)
player.gainXp(item.xpReward)
progressBar.progress = 0
//Vibration to signal collect of the resource
val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrator.vibrate(100)
// Generate a resource item and XP reward
val item = Generator.generateLootCollection()
currentPlayer.addItem(item)
currentPlayer.gainXp(item.xpReward)
//reset to 0 the progress bar
progressBar.progress = 0
val maVue = view.findViewById<View>(R.id.toast)
val image = maVue.findViewById<ImageView>(R.id.imageViewLoot)
val name = maVue.findViewById<TextView>(R.id.nameLoot)
val xp = maVue.findViewById<TextView>(R.id.xpRewarded)
maVue.visibility = View.VISIBLE
image.setImageResource(item.image)
name.text = item.name
xp.text = item.xpReward.toString()
maVue.postDelayed({
maVue.visibility = View.GONE
}, 3000)
// Show loot toast view for 3 seconds
displayToast(view,item)
}
if (acceleration > 40) {
// Le téléphone a été secoué, mettre à jour la barre de chargement ici
progressBar.progress += (acceleration/20).toInt() // Incrémente la progression de la barre de 10 unités
// raise the progress bar based on acceleration value
progressBar.progress += (acceleration/20).toInt()
}
}
}
// Enregistrez l'écouteur de capteur d'accéléromètre
// Register accelerometer sensor earphone with manager
sensorManager.registerListener(
accelerometerEventListener,
accelerometer,
SensorManager.SENSOR_DELAY_GAME
)
// Retournez la vue de fragment
return view
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onDestroy() {
super.onDestroy()
// Désenregistrez l'écouteur de capteur d'accéléromètre lorsque le fragment est détruit
// Unregister the accelerometer sensor listener when the fragment is destroyed
sensorManager.unregisterListener(accelerometerEventListener)
val activity = requireActivity()
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED

@ -5,55 +5,62 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Player
class HomeFragment : Fragment() {
private lateinit var pseudo : TextView
private lateinit var progressbar : ProgressBar
private lateinit var level : TextView
private lateinit var rank : TextView
private lateinit var maxXp : TextView
private lateinit var xp : TextView
private lateinit var buttonCollect : ConstraintLayout
private lateinit var buttonBoss : ConstraintLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val player = (activity as MainActivity).currentPlayer
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_home,container,false)
val buttonCollect = view.findViewById<ConstraintLayout>(R.id.buttonCollect)
// Initialize views
initializeViews(view, currentPlayer)
return view
}
private fun initializeViews(view: View, currentPlayer : Player) {
pseudo = view.findViewById(R.id.pseudoTextView)
progressbar = view.findViewById(R.id.levelProgressBar)
level = view.findViewById(R.id.levelTextView)
rank = view.findViewById(R.id.rankTextView)
maxXp = view.findViewById(R.id.maxXpTextView)
xp = view.findViewById(R.id.xpTextView)
buttonCollect = view.findViewById(R.id.buttonCollect)
buttonCollect.setOnClickListener{
findNavController().navigate(R.id.action_homeFragment_to_collectFragment, null, NavOptions.Builder().setPopUpTo(R.id.homeFragment, false).build())
}
val buttonBoss = view.findViewById<ConstraintLayout>(R.id.buttonBoss)
buttonBoss = view.findViewById(R.id.buttonBoss)
buttonBoss.setOnClickListener{
findNavController().navigate(R.id.action_homeFragment_to_bossFragment, null, NavOptions.Builder().setPopUpTo(R.id.homeFragment, false).build())
}
val pseudo = view.findViewById<TextView>(R.id.pseudoTextView)
val progressbar = view.findViewById<ProgressBar>(R.id.levelProgressBar)
val level = view.findViewById<TextView>(R.id.levelTextView)
val rank = view.findViewById<TextView>(R.id.rankTextView)
val maxXp = view.findViewById<TextView>(R.id.maxXpTextView)
val xp = view.findViewById<TextView>(R.id.xpTextView)
pseudo.text = player.pseudo
level.text = player.level.toString()
rank.text = player.rank
xp.text = player.xp.toString()
maxXp.text = (player.level*100).toString()
progressbar.progress = player.xp
progressbar.max = player.level*100
return view
pseudo.text = currentPlayer.pseudo
level.text = currentPlayer.level.toString()
rank.text = currentPlayer.rank
xp.text = currentPlayer.xp.toString()
maxXp.text = (currentPlayer.level*100).toString()
progressbar.progress = currentPlayer.xp
progressbar.max = currentPlayer.level*100
}

@ -7,32 +7,36 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.data.Stub
import com.example.shakecraft.model.Player
import com.example.shakecraft.view.adapter.AdapterInventory
class InventoryFragment() : Fragment( ) {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
var player = (activity as MainActivity).currentPlayer
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_inventory, container, false)
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerviewInventory)
// Initialize views
setUpRecyclerView(view, currentPlayer)
return view
}
private fun setUpRecyclerView(view: View, currentPlayer: Player) {
recyclerView = view.findViewById(R.id.recyclerviewInventory)
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
adapter = AdapterInventory(player.items)
adapter = AdapterInventory(currentPlayer.items)
}
return view
}
}

@ -6,27 +6,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
/**
* A simple [Fragment] subclass.
* Use the [PlusFragment.newInstance] factory method to
* create an instance of this fragment.
*/
class PlusFragment : Fragment() {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
@ -37,23 +22,5 @@ class PlusFragment : Fragment() {
return inflater.inflate(R.layout.fragment_plus, container, false)
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment PlusFragment.
*/
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String, param2: String) =
PlusFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
}
Loading…
Cancel
Save