diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..fd2a24b
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0269028..cf53e4e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,8 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/BossFragment.kt b/app/src/main/java/com/example/shakecraft/BossFragment.kt
index e29b92d..357e326 100644
--- a/app/src/main/java/com/example/shakecraft/BossFragment.kt
+++ b/app/src/main/java/com/example/shakecraft/BossFragment.kt
@@ -1,5 +1,6 @@
package com.example.shakecraft
+import android.hardware.SensorManager
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
@@ -17,16 +18,10 @@ private const val ARG_PARAM2 = "param2"
* create an instance of this fragment.
*/
class BossFragment : 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 +32,4 @@ class BossFragment : Fragment() {
return inflater.inflate(R.layout.fragment_boss, 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 BossFragment.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- BossFragment().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
- }
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/CollectFragment.kt b/app/src/main/java/com/example/shakecraft/CollectFragment.kt
index edb20ad..28d0a7c 100644
--- a/app/src/main/java/com/example/shakecraft/CollectFragment.kt
+++ b/app/src/main/java/com/example/shakecraft/CollectFragment.kt
@@ -1,59 +1,127 @@
package com.example.shakecraft
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.Context.SENSOR_SERVICE
+import android.content.pm.ActivityInfo
+import android.hardware.Sensor
+import android.hardware.SensorEvent
+import android.hardware.SensorEventListener
+import android.hardware.SensorManager
import android.os.Bundle
+import android.os.Vibrator
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.animation.AlphaAnimation
+import android.widget.ImageView
+import android.widget.ProgressBar
+import android.widget.TextView
+import androidx.core.content.ContextCompat.getSystemService
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.shakecraft.data.Stub
+import com.example.shakecraft.model.GeneratorLoot
+import com.example.shakecraft.model.Player
+import com.example.shakecraft.view.adapter.AdapterInventory
+import kotlin.math.pow
+import kotlin.math.sqrt
-// 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 [CollectFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
-class CollectFragment : Fragment() {
- // TODO: Rename and change types of parameters
- private var param1: String? = null
- private var param2: String? = null
+
+class CollectFragment(var player: Player) : Fragment() {
+ var stubdata = Stub().load();
+ private lateinit var sensorManager: SensorManager
+ private lateinit var accelerometer: Sensor
+ private lateinit var accelerometerEventListener: SensorEventListener
+ private lateinit var progressBar: ProgressBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- arguments?.let {
- param1 = it.getString(ARG_PARAM1)
- param2 = it.getString(ARG_PARAM2)
- }
+
+
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_collect, container, false)
- }
+ // Récupérez une référence à la ProgressBar dans la vue
+ val view = inflater.inflate(R.layout.fragment_collect, container, false)
+
+ progressBar = view.findViewById(R.id.progressBar)
+ 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
+ }
+
+ @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)
+ )
+ if(progressBar.progress == 100){
+ val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
+ vibrator.vibrate(100)
+
+
+
+ val item = GeneratorLoot.generateLootCollection();
+ println(item);
- 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 CollectFragment.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- CollectFragment().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
+ val maVue = view.findViewById(R.id.toast)
+ val image = maVue.findViewById(R.id.imageViewLoot)
+ val name = maVue.findViewById(R.id.nameLoot)
+ val xp = maVue.findViewById(R.id.xpRewarded)
+ maVue.visibility = View.VISIBLE
+ val fadeIn = AlphaAnimation(0f, 1f)
+ fadeIn.duration = 200
+ maVue.startAnimation(fadeIn)
+ maVue.postDelayed({
+ maVue.visibility = View.GONE
+ image.setImageResource(item.image)
+ name.text = item.name
+
+ }, 3000)
+
+
+ player.addItem(item);
+ progressBar.progress = 0;
+ }
+ 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
}
}
+ }
+
+ // Enregistrez l'écouteur de capteur d'accéléromètre
+ 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
+ sensorManager.unregisterListener(accelerometerEventListener)
+ val activity = requireActivity()
+ activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/InventoryFragment.kt b/app/src/main/java/com/example/shakecraft/InventoryFragment.kt
index d156962..7592f22 100644
--- a/app/src/main/java/com/example/shakecraft/InventoryFragment.kt
+++ b/app/src/main/java/com/example/shakecraft/InventoryFragment.kt
@@ -8,22 +8,13 @@ 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
-// 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 [InventoryFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
-class InventoryFragment : Fragment() {
+class InventoryFragment(var player: Player) : Fragment( ) {
- var stubdata = Stub().load();
override fun onCreateView(
@@ -35,7 +26,7 @@ class InventoryFragment : Fragment() {
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerviewInventory)
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
- adapter = AdapterInventory(stubdata)
+ adapter = AdapterInventory(player.items)
}
return view
}
diff --git a/app/src/main/java/com/example/shakecraft/MainActivity.kt b/app/src/main/java/com/example/shakecraft/MainActivity.kt
index 8da29ac..3c7b1ef 100644
--- a/app/src/main/java/com/example/shakecraft/MainActivity.kt
+++ b/app/src/main/java/com/example/shakecraft/MainActivity.kt
@@ -18,6 +18,7 @@ class MainActivity : AppCompatActivity() {
private var progressValue = 20
private var lastShakePosition = 0f
+ var currentPlayer = Stub().currentPlayer;
// Function to hide NavigationBar
@RequiresApi(Build.VERSION_CODES.R)
@@ -52,11 +53,11 @@ class MainActivity : AppCompatActivity() {
true
}
R.id.inventory -> {
- loadFragment(InventoryFragment())
+ loadFragment(InventoryFragment(currentPlayer))
true
}
R.id.plus -> {
- loadFragment(CollectFragment())
+ loadFragment(CollectFragment(currentPlayer))
true
}
else -> false
diff --git a/app/src/main/java/com/example/shakecraft/data/Stub.kt b/app/src/main/java/com/example/shakecraft/data/Stub.kt
index c8023d2..c3de05e 100644
--- a/app/src/main/java/com/example/shakecraft/data/Stub.kt
+++ b/app/src/main/java/com/example/shakecraft/data/Stub.kt
@@ -1,17 +1,22 @@
package com.example.shakecraft.data
+import com.example.shakecraft.R
import com.example.shakecraft.model.Item
+import com.example.shakecraft.model.Player
class Stub {
fun load() : List- {
val items : MutableList
- = mutableListOf
- ()
- items.add(Item(name = "Beech Log", rarity = 0, stack = 1));
- items.add(Item(name = "Bronze Ore", rarity = 0, stack = 1));
- items.add(Item(name = "Iron Ore", rarity = 0, stack = 1));
- items.add(Item(name = "Diamond", rarity = 0, stack = 1));
+ items.add(Item(name = "Beech Log", rarity = 0, stack = 1, R.drawable.ic_anvil));
+ items.add(Item(name = "Bronze Ore", rarity = 0, stack = 1, R.drawable.ic_anvil));
+ items.add(Item(name = "Iron Ore", rarity = 0, stack = 1, R.drawable.ic_anvil));
+ items.add(Item(name = "Diamond", rarity = 0, stack = 1, R.drawable.ic_anvil));
return items;
}
+
+ var currentPlayer : Player = Player("Winker",0);
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/model/GeneratorLoot.kt b/app/src/main/java/com/example/shakecraft/model/GeneratorLoot.kt
new file mode 100644
index 0000000..1f7208c
--- /dev/null
+++ b/app/src/main/java/com/example/shakecraft/model/GeneratorLoot.kt
@@ -0,0 +1,29 @@
+package com.example.shakecraft.model
+
+import com.example.shakecraft.R
+import kotlin.random.Random
+
+class GeneratorLoot {
+
+ companion object {
+ fun generateLootCollection(): Item {
+ val possibleLoot: List> = listOf(
+ Pair(Item(name = "Beech Log", rarity = 0, stack = 1, R.drawable.log2), 0.6),
+ Pair(Item(name = "Bronze Ore", rarity = 0, stack = 1, R.drawable.bronze_ore), 0.25),
+ Pair(Item(name = "Iron Ore", rarity = 0, stack = 1, R.drawable.iron_ore), 0.10),
+ Pair(Item(name = "Diamond", rarity = 0, stack = 1, R.drawable.diamond), 0.05),
+ )
+ val rand = Random.nextDouble()
+
+ var cumulativeProb = 0.0
+ for (element in possibleLoot) {
+ cumulativeProb += element.second
+ if (rand < cumulativeProb) {
+ return element.first
+ }
+ }
+ // Si aucun élément n'a été choisi, retourner le dernier élément de la liste
+ return possibleLoot.last().first
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/model/Item.kt b/app/src/main/java/com/example/shakecraft/model/Item.kt
index ea6f857..f73a6a1 100644
--- a/app/src/main/java/com/example/shakecraft/model/Item.kt
+++ b/app/src/main/java/com/example/shakecraft/model/Item.kt
@@ -1,9 +1,12 @@
package com.example.shakecraft.model
+import android.media.Image
+
data class Item(
var name: String,
var rarity: Int,
var stack: Int,
+ var image: Int,
)
diff --git a/app/src/main/java/com/example/shakecraft/model/Player.kt b/app/src/main/java/com/example/shakecraft/model/Player.kt
new file mode 100644
index 0000000..ff7bc5e
--- /dev/null
+++ b/app/src/main/java/com/example/shakecraft/model/Player.kt
@@ -0,0 +1,32 @@
+package com.example.shakecraft.model
+
+class Player(val pseudo: String, var xp: Int = 0) {
+ var level: Int = 1
+ private set
+
+ val items: MutableList
- = mutableListOf()
+
+ fun addItem(item: Item) {
+ var findItem = items.find { it.name == item.name }
+ if(findItem!= null){
+ findItem.stack += 1;
+ }
+ else{items.add(item)}
+ }
+
+ fun removeItem(item: Item) {
+ items.remove(item)
+ }
+
+ fun increaseXp(amount: Int) {
+ xp += amount
+ if (xp >= 100 * level) {
+ levelUp()
+ }
+ }
+
+ private fun levelUp() {
+ level++
+ println("$pseudo a atteint le niveau $level !")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/shakecraft/view/adapter/AdapterInventory.kt b/app/src/main/java/com/example/shakecraft/view/adapter/AdapterInventory.kt
index 9e74a14..c1f9877 100644
--- a/app/src/main/java/com/example/shakecraft/view/adapter/AdapterInventory.kt
+++ b/app/src/main/java/com/example/shakecraft/view/adapter/AdapterInventory.kt
@@ -3,6 +3,7 @@ package com.example.shakecraft.view.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
@@ -15,13 +16,21 @@ class AdapterInventory(private val inventory: List
- ) : RecyclerView.Adapter
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
+ val textViewNumber: TextView
+ var imageView: ImageView
+
init {
// Define click listener for the ViewHolder's View
+
textView = view.findViewById(R.id.item_name)
+ textViewNumber = view.findViewById(R.id.item_stock)
+ imageView = view.findViewById(R.id.item_image)
}
fun bind(item: Item) {
textView.text = item.name
+ textViewNumber.text = item.stack.toString()
+ imageView.setImageResource(item.image)
}
}
diff --git a/app/src/main/res/drawable/bronze_ore.png b/app/src/main/res/drawable/bronze_ore.png
new file mode 100644
index 0000000..2fe78d9
Binary files /dev/null and b/app/src/main/res/drawable/bronze_ore.png differ
diff --git a/app/src/main/res/drawable/diamond.png b/app/src/main/res/drawable/diamond.png
new file mode 100644
index 0000000..d86f073
Binary files /dev/null and b/app/src/main/res/drawable/diamond.png differ
diff --git a/app/src/main/res/drawable/iron_ore.png b/app/src/main/res/drawable/iron_ore.png
new file mode 100644
index 0000000..a5a7a16
Binary files /dev/null and b/app/src/main/res/drawable/iron_ore.png differ
diff --git a/app/src/main/res/drawable/item_background.xml b/app/src/main/res/drawable/item_background.xml
new file mode 100644
index 0000000..d11eca4
--- /dev/null
+++ b/app/src/main/res/drawable/item_background.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/log2.png b/app/src/main/res/drawable/log2.png
new file mode 100644
index 0000000..195af4f
Binary files /dev/null and b/app/src/main/res/drawable/log2.png differ
diff --git a/app/src/main/res/drawable/toast_notification.xml b/app/src/main/res/drawable/toast_notification.xml
new file mode 100644
index 0000000..5622a8e
--- /dev/null
+++ b/app/src/main/res/drawable/toast_notification.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_collect.xml b/app/src/main/res/layout/fragment_collect.xml
index 03ce752..ca25ea6 100644
--- a/app/src/main/res/layout/fragment_collect.xml
+++ b/app/src/main/res/layout/fragment_collect.xml
@@ -59,28 +59,224 @@
app:layout_constraintTop_toBottomOf="@+id/frameLayout" />
-
+ app:layout_constraintTop_toBottomOf="@+id/progressBar">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml
index 283ad88..55970a4 100644
--- a/app/src/main/res/layout/list_item.xml
+++ b/app/src/main/res/layout/list_item.xml
@@ -1,6 +1,7 @@
@@ -36,7 +37,6 @@
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Beech Log"
android:textColor="@color/white"
android:textStyle="bold" />
@@ -50,11 +50,18 @@
android:id="@+id/item_stock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="1,6K"
android:textColor="@color/grey_300"
android:textStyle="bold" />
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f64a5d3..7b76b62 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -10,6 +10,7 @@
#6D8DFC
#1D1C22
#343339
+ #302F35
#2D2C32
#ADACB2
#FF3D3D
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3838a80..753c4d0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,6 +3,5 @@
Inventory
Home
Plus
-
Hello blank fragment
\ No newline at end of file