diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index fd2a24b..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 2cf014d..3737add 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,6 +41,8 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' 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' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/java/com/example/shakecraft/BossFragment.kt b/app/src/main/java/com/example/shakecraft/BossFragment.kt index 357e326..966fc59 100644 --- a/app/src/main/java/com/example/shakecraft/BossFragment.kt +++ b/app/src/main/java/com/example/shakecraft/BossFragment.kt @@ -1,35 +1,117 @@ package com.example.shakecraft +import android.annotation.SuppressLint +import android.content.Context +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.widget.ImageView +import android.widget.ProgressBar +import com.example.shakecraft.data.Stub +import com.example.shakecraft.model.Boss +import com.example.shakecraft.model.Generator +import com.example.shakecraft.model.Player +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 [BossFragment.newInstance] factory method to - * create an instance of this fragment. - */ -class BossFragment : Fragment() { +class BossFragment(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 + private lateinit var image: ImageView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_boss, container, false) + // Récupérez une référence à la ProgressBar dans la vue + val view = inflater.inflate(R.layout.fragment_boss, container, false) + + progressBar = view.findViewById(R.id.progressBar) + image = view.findViewById(R.id.imageBoss) + 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; + image.setImageResource(boss.image) + + + // 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(boss.life <= 0){ + val item = Generator.generateLootBoss(boss.possibleLoot); + println(item); + player.addItem(item); + boss = Generator.generateBoss(); + println(boss); + image.setImageResource(boss.image) + val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + vibrator.vibrate(100) + + + + + + } + if (acceleration > 40) { + // Le téléphone a été secoué, mettre à jour la barre de chargement ici + boss.takeDamage((acceleration/80).toInt()); + progressBar.progress = boss.life; + } + } + } + + // 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/CollectFragment.kt b/app/src/main/java/com/example/shakecraft/CollectFragment.kt index 28d0a7c..4aa3024 100644 --- a/app/src/main/java/com/example/shakecraft/CollectFragment.kt +++ b/app/src/main/java/com/example/shakecraft/CollectFragment.kt @@ -2,7 +2,6 @@ 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 @@ -14,17 +13,12 @@ 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.Generator import com.example.shakecraft.model.Player -import com.example.shakecraft.view.adapter.AdapterInventory import kotlin.math.pow import kotlin.math.sqrt @@ -40,6 +34,8 @@ class CollectFragment(var player: Player) : Fragment() { super.onCreate(savedInstanceState) + + } override fun onCreateView( @@ -65,32 +61,31 @@ class CollectFragment(var player: Player) : Fragment() { 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); + progressBar.progress = 0; val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator vibrator.vibrate(100) - val item = GeneratorLoot.generateLootCollection(); - println(item); 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) + image.setImageResource(item.image) + name.text = item.name 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 diff --git a/app/src/main/java/com/example/shakecraft/model/Boss.kt b/app/src/main/java/com/example/shakecraft/model/Boss.kt new file mode 100644 index 0000000..599b28f --- /dev/null +++ b/app/src/main/java/com/example/shakecraft/model/Boss.kt @@ -0,0 +1,19 @@ +package com.example.shakecraft.model + +import com.example.shakecraft.R + +class Boss ( + var name: String, + var life: Int, + var maxlife: Int, + var image: Int, +){ + val possibleLoot: List> = listOf( + Pair(Item(name = "Monster Bones", rarity = 0, stack = 1, R.drawable.monster_bones), 0.7), + Pair(Item(name = "Monster Eye", rarity = 0, stack = 1, R.drawable.monster_bones), 0.25), + Pair(Item(name = "Treasure Key", rarity = 0, stack = 1, R.drawable.treasure_key), 0.05), + ) + fun takeDamage(strength: Int) { + this.life -= strength; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/shakecraft/model/Generator.kt b/app/src/main/java/com/example/shakecraft/model/Generator.kt new file mode 100644 index 0000000..99cb0c9 --- /dev/null +++ b/app/src/main/java/com/example/shakecraft/model/Generator.kt @@ -0,0 +1,65 @@ +package com.example.shakecraft.model + +import com.example.shakecraft.R +import kotlin.random.Random + +class Generator { + + 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 + } + + fun generateLootBoss( possibleLoot : List>): Item { + 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 + } + + + fun generateBoss(): Boss { + val possibleBoss: List> = listOf( + Pair(Boss(name = "Margit the Fell Omen", life = 150, maxlife = 150, image = R.drawable.boss), 0.5), + Pair(Boss(name = "Godrick the Grafted", life = 200, maxlife = 200, image = R.drawable.skeleton), 0.2), + Pair(Boss(name = "Red Wolf of Radagon", life = 250, maxlife = 250, image = R.drawable.halberdier), 0.15), + Pair(Boss(name = "Old Banshee", life = 300, maxlife = 300, image = R.drawable.banshee), 0.10), + Pair(Boss(name = "Margit the Fell Omen", life = 500, maxlife = 500, image = R.drawable.lich), 0.05), + ) + val rand = Random.nextDouble() + + var cumulativeProb = 0.0 + for (element in possibleBoss) { + 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 possibleBoss.last().first + } + } +} \ 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 deleted file mode 100644 index 1f7208c..0000000 --- a/app/src/main/java/com/example/shakecraft/model/GeneratorLoot.kt +++ /dev/null @@ -1,29 +0,0 @@ -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/res/drawable/banshee.png b/app/src/main/res/drawable/banshee.png new file mode 100644 index 0000000..5e3962d Binary files /dev/null and b/app/src/main/res/drawable/banshee.png differ diff --git a/app/src/main/res/drawable/boss.png b/app/src/main/res/drawable/boss.png new file mode 100644 index 0000000..9bfd11e Binary files /dev/null and b/app/src/main/res/drawable/boss.png differ diff --git a/app/src/main/res/drawable/halberdier.png b/app/src/main/res/drawable/halberdier.png new file mode 100644 index 0000000..98a3750 Binary files /dev/null and b/app/src/main/res/drawable/halberdier.png differ diff --git a/app/src/main/res/drawable/lich.png b/app/src/main/res/drawable/lich.png new file mode 100644 index 0000000..02a07ea Binary files /dev/null and b/app/src/main/res/drawable/lich.png differ diff --git a/app/src/main/res/drawable/monster_bones.png b/app/src/main/res/drawable/monster_bones.png new file mode 100644 index 0000000..e36f388 Binary files /dev/null and b/app/src/main/res/drawable/monster_bones.png differ diff --git a/app/src/main/res/drawable/monster_eyes.png b/app/src/main/res/drawable/monster_eyes.png new file mode 100644 index 0000000..b3023fd Binary files /dev/null and b/app/src/main/res/drawable/monster_eyes.png differ diff --git a/app/src/main/res/drawable/skeleton.png b/app/src/main/res/drawable/skeleton.png new file mode 100644 index 0000000..d303e46 Binary files /dev/null and b/app/src/main/res/drawable/skeleton.png differ diff --git a/app/src/main/res/drawable/treasure_key.png b/app/src/main/res/drawable/treasure_key.png new file mode 100644 index 0000000..1f0fefb Binary files /dev/null and b/app/src/main/res/drawable/treasure_key.png differ diff --git a/app/src/main/res/layout/fragment_boss.xml b/app/src/main/res/layout/fragment_boss.xml index 0bc344a..e32e608 100644 --- a/app/src/main/res/layout/fragment_boss.xml +++ b/app/src/main/res/layout/fragment_boss.xml @@ -59,28 +59,154 @@ app:layout_constraintTop_toBottomOf="@+id/frameLayout" /> - + + + app:layout_constraintTop_toBottomOf="@+id/imageBoss"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 ca25ea6..a6cd9b8 100644 --- a/app/src/main/res/layout/fragment_collect.xml +++ b/app/src/main/res/layout/fragment_collect.xml @@ -228,7 +228,6 @@ android:layout_margin="5dp" android:layout_width="40dp" android:layout_height="40dp" - android:src="@drawable/log2" android:background="@drawable/item_background" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -248,7 +247,6 @@ android:id="@+id/nameLoot" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Log tree" android:textStyle="bold" android:textSize="15sp" android:textColor="@color/white"> @@ -263,7 +261,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="10" - android:text="10" android:textColor="@color/grey_300" android:textSize="10sp"> + app:layout_constraintTop_toBottomOf="@+id/collectbutton"> + + + + + + + + + + + + + + \ No newline at end of file