diff --git a/ShakeAndCraft/.idea/misc.xml b/ShakeAndCraft/.idea/misc.xml index 282e8b8..54d5acd 100644 --- a/ShakeAndCraft/.idea/misc.xml +++ b/ShakeAndCraft/.idea/misc.xml @@ -7,11 +7,4 @@ - - - \ No newline at end of file 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 9011b6e..b9862e3 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/CollectFragment.kt @@ -33,7 +33,7 @@ class CollectFragment() : Fragment() { private lateinit var accelerometer: Sensor private lateinit var accelerometerEventListener: SensorEventListener private lateinit var progressBar: ProgressBar - private lateinit var buttonCollect: TextView + private lateinit var buttonBack: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -61,8 +61,8 @@ class CollectFragment() : Fragment() { } private fun initializeViews(view: View) { progressBar = view.findViewById(R.id.progressBar) - buttonCollect = view.findViewById(R.id.backbutton) - buttonCollect.setOnClickListener{ + buttonBack = view.findViewById(R.id.backbutton) + buttonBack.setOnClickListener{ findNavController().navigate(R.id.action_collectFragment_to_homeFragment) } } diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt new file mode 100644 index 0000000..e756f30 --- /dev/null +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/ForgeFragment.kt @@ -0,0 +1,66 @@ +package com.example.shakecraft + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.shakecraft.model.RecipeManager +import com.example.shakecraft.view.adapter.AdapterRecipe + + +class ForgeFragment : Fragment() { + private lateinit var buttonBack: TextView + private lateinit var recyclerViewObjects: RecyclerView + private lateinit var recyclerViewTools: RecyclerView + private lateinit var recyclerViewBlacksmithing: RecyclerView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + private fun initializeViews(view: View) { + buttonBack = view.findViewById(R.id.backbutton) + buttonBack.setOnClickListener{ + findNavController().navigate(R.id.action_forgeFragment_to_homeFragment) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.fragment_forge, container, false) + + // Initialize views + initializeViews(view) + + setUpRecyclerView(view) + + return view + } + + private fun setUpRecyclerView(view: View) { + recyclerViewObjects = view.findViewById(R.id.RecyclerviewObjects) + with(recyclerViewObjects) { + layoutManager = LinearLayoutManager(view.context) + adapter = AdapterRecipe(RecipeManager.recipeListObjects) + } + recyclerViewTools = view.findViewById(R.id.RecyclerviewTools) + with(recyclerViewTools) { + layoutManager = LinearLayoutManager(view.context) + adapter = AdapterRecipe(RecipeManager.recipeListTools) + } + recyclerViewBlacksmithing = view.findViewById(R.id.RecyclerviewBlacksmithing) + with(recyclerViewBlacksmithing) { + layoutManager = LinearLayoutManager(view.context) + adapter = AdapterRecipe(RecipeManager.recipeListBlacksmithing) + } + } + + +} \ No newline at end of file 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 11d7ca2..0f19267 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/HomeFragment.kt @@ -22,6 +22,7 @@ class HomeFragment : Fragment() { private lateinit var xp : TextView private lateinit var buttonCollect : ConstraintLayout private lateinit var buttonBoss : ConstraintLayout + private lateinit var buttonForge : ConstraintLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -54,6 +55,10 @@ class HomeFragment : Fragment() { buttonBoss.setOnClickListener{ findNavController().navigate(R.id.action_homeFragment_to_bossFragment, null, NavOptions.Builder().setPopUpTo(R.id.homeFragment, false).build()) } + buttonForge = view.findViewById(R.id.buttonForge) + buttonForge.setOnClickListener{ + findNavController().navigate(R.id.action_homeFragment_to_forgeFragment, null, NavOptions.Builder().setPopUpTo(R.id.homeFragment, false).build()) + } pseudo.text = currentPlayer.pseudo level.text = currentPlayer.level.toString() rank.text = currentPlayer.rank 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 e2d7a7d..973ed9a 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/MainActivity.kt @@ -7,18 +7,15 @@ import androidx.annotation.RequiresApi import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat - import androidx.navigation.findNavController import androidx.navigation.ui.setupWithNavController - -import com.example.shakecraft.data.Stub - +import com.example.shakecraft.model.Player import com.google.android.material.bottomnavigation.BottomNavigationView class MainActivity : AppCompatActivity() { - var currentPlayer = Stub().currentPlayer + var currentPlayer = Player("Winker",0) @RequiresApi(Build.VERSION_CODES.R) private fun hideSystemUI() { diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Item.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Item.kt index 4eb1b07..c34cc84 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Item.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Item.kt @@ -3,10 +3,10 @@ package com.example.shakecraft.model data class Item( var name: String, - var rarity: Int, - var stack: Int, + var rarity: Int = 1, + var stack: Int = 1, var image: Int, - var xpReward: Int, + var xpReward: Int = 0, ) diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Player.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Player.kt index e9da6ed..e400e68 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Player.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Player.kt @@ -63,6 +63,29 @@ class Player(val pseudo: String, var xp: Int = 0) { items.remove(item) } + fun hasItem(item: Item) : Boolean{ + for (playeritem in items){ + if(playeritem.name == item.name && playeritem.stack >= item.stack){ + return true + } + } + return false + } + fun craft(recipe: Recipe) : Boolean{ + for (ingredient in recipe.ingredients) { + val searchedItem = items.find { it.name == recipe.item.name } + if(searchedItem != null) { + searchedItem.stack -= recipe.item.stack + if (searchedItem.stack == 0){ + items.remove(searchedItem) + } + return true + } + else + return false + } + return false + } } \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Recipe.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Recipe.kt index d42bcfa..5bcf18c 100644 --- a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Recipe.kt +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/Recipe.kt @@ -1,4 +1,4 @@ package com.example.shakecraft.model -class Recipe(val item: Item, val quantity: Int, itemsNeeded : List) { +class Recipe(val item: Item, val ingredients : List, val type: String) { } \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/RecipeManager.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/RecipeManager.kt new file mode 100644 index 0000000..eb42557 --- /dev/null +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/model/RecipeManager.kt @@ -0,0 +1,79 @@ +package com.example.shakecraft.model + +import com.example.shakecraft.R + +class RecipeManager { + + + + companion object { + + var recipeListObjects : List = listOf( + Recipe( + Item("Wooden Stick", image = R.drawable.wooden_stick, stack = 1),listOf( + Item("Wooden Plank", image = R.drawable.wooden_plank, stack = 2) + ), "Objects"), + Recipe( + Item("Wooden Plank", image = R.drawable.wooden_plank, stack = 4),listOf( + Item("Beech Log", image = R.drawable.log2, stack = 2) + ), "Objects"), + Recipe( + Item("Wooden Ball", image = R.drawable.wooden_ball, stack = 1),listOf( + Item("Wooden Stick", image = R.drawable.wooden_stick, stack = 2), + Item("Wooden Plank", image = R.drawable.wooden_plank, stack = 2) + ), "Objects"), + + ) + var recipeListTools : List = listOf( + + Recipe( + Item("Bronze Sword", image = R.drawable.bronze_sword, stack = 1),listOf( + Item("Wooden Stick", image = R.drawable.wooden_stick, stack = 5), + Item("Bronze Ingot", image = R.drawable.bronze_ore, stack = 10) + + ), "Tools"), + Recipe( + Item("Wizard Staff", image = R.drawable.wizard_staff, stack = 1),listOf( + Item("Wooden Stick", image = R.drawable.wooden_stick, stack = 10), + Item("Monster Eye", image = R.drawable.monster_eyes, stack = 20), + + ), "Tools"), + Recipe( + Item("Diamond Axe", image = R.drawable.diamond_axe, stack = 1),listOf( + Item("Wooden Stick", image = R.drawable.wooden_stick, stack = 5), + Item("Diamond", image = R.drawable.diamond, stack = 10), + + ), "Tools"), + ) + var recipeListBlacksmithing : List = listOf( + + Recipe( + Item("Bronze Ingot", image = R.drawable.bronze_ingot, stack = 1),listOf( + Item("Bronze Ore", image = R.drawable.bronze_ore, stack = 5) + + ), "Blacksmithing"), + Recipe( + Item("Iron Ingot", image = R.drawable.iron_ingot, stack = 1),listOf( + Item("Iron Ore", image = R.drawable.iron_ore, stack = 5) + + ), "Blacksmithing"), + + ) + + + + + + + fun isCraftable(recipe: Recipe, player: Player): Boolean{ + for (ingredient in recipe.ingredients) { + if (!player.hasItem(ingredient)) { + return false + } + } + return true + } + + + } +} \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/java/com/example/shakecraft/view/adapter/AdapterRecipe.kt b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/view/adapter/AdapterRecipe.kt new file mode 100644 index 0000000..fbc45dc --- /dev/null +++ b/ShakeAndCraft/app/src/main/java/com/example/shakecraft/view/adapter/AdapterRecipe.kt @@ -0,0 +1,50 @@ +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 com.example.shakecraft.R +import com.example.shakecraft.model.Recipe + + + +class AdapterRecipe(private val recipelist: List) : RecyclerView.Adapter() { + + class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val textView: TextView + var imageView: ImageView + + + init { + // Define click listener for the ViewHolder's View + + textView = view.findViewById(R.id.item_name) + imageView = view.findViewById(R.id.item_image) + } + fun bind(recipe: Recipe) { + textView.text = recipe.item.name + imageView.setImageResource(recipe.item.image) + } + } + + override fun getItemCount() = recipelist.size + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.list_item, parent, false) + + return ViewHolder(view) + } + + override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { + val recipe : Recipe = recipelist[position] + viewHolder.bind(recipe) + } + + + + +} + diff --git a/ShakeAndCraft/app/src/main/res/drawable/bronze_ingot.png b/ShakeAndCraft/app/src/main/res/drawable/bronze_ingot.png new file mode 100644 index 0000000..9cd1e25 Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/bronze_ingot.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/bronze_sword.png b/ShakeAndCraft/app/src/main/res/drawable/bronze_sword.png new file mode 100644 index 0000000..53ae8ba Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/bronze_sword.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/diamond_axe.png b/ShakeAndCraft/app/src/main/res/drawable/diamond_axe.png new file mode 100644 index 0000000..a7ba8f6 Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/diamond_axe.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/iron_ingot.png b/ShakeAndCraft/app/src/main/res/drawable/iron_ingot.png new file mode 100644 index 0000000..35c4a20 Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/iron_ingot.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/item_recipe_background.xml b/ShakeAndCraft/app/src/main/res/drawable/item_recipe_background.xml new file mode 100644 index 0000000..76df25d --- /dev/null +++ b/ShakeAndCraft/app/src/main/res/drawable/item_recipe_background.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/drawable/recipelistcard.xml b/ShakeAndCraft/app/src/main/res/drawable/recipelistcard.xml new file mode 100644 index 0000000..5991d41 --- /dev/null +++ b/ShakeAndCraft/app/src/main/res/drawable/recipelistcard.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/drawable/roundedreciplistcard.xml b/ShakeAndCraft/app/src/main/res/drawable/roundedreciplistcard.xml new file mode 100644 index 0000000..7b6ae35 --- /dev/null +++ b/ShakeAndCraft/app/src/main/res/drawable/roundedreciplistcard.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/drawable/wizard_staff.png b/ShakeAndCraft/app/src/main/res/drawable/wizard_staff.png new file mode 100644 index 0000000..db66ec7 Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/wizard_staff.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/wooden_ball.png b/ShakeAndCraft/app/src/main/res/drawable/wooden_ball.png new file mode 100644 index 0000000..65d0395 Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/wooden_ball.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/wooden_plank.png b/ShakeAndCraft/app/src/main/res/drawable/wooden_plank.png new file mode 100644 index 0000000..f9c32fd Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/wooden_plank.png differ diff --git a/ShakeAndCraft/app/src/main/res/drawable/wooden_stick.png b/ShakeAndCraft/app/src/main/res/drawable/wooden_stick.png new file mode 100644 index 0000000..d7aa17d Binary files /dev/null and b/ShakeAndCraft/app/src/main/res/drawable/wooden_stick.png differ diff --git a/ShakeAndCraft/app/src/main/res/layout/fragment_forge.xml b/ShakeAndCraft/app/src/main/res/layout/fragment_forge.xml new file mode 100644 index 0000000..3185d63 --- /dev/null +++ b/ShakeAndCraft/app/src/main/res/layout/fragment_forge.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/layout/fragment_home.xml b/ShakeAndCraft/app/src/main/res/layout/fragment_home.xml index e6c6bb6..2a87f89 100644 --- a/ShakeAndCraft/app/src/main/res/layout/fragment_home.xml +++ b/ShakeAndCraft/app/src/main/res/layout/fragment_home.xml @@ -143,7 +143,7 @@ + app:layout_constraintTop_toBottomOf="@+id/buttonForge"> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/navigation/my_nav.xml b/ShakeAndCraft/app/src/main/res/navigation/my_nav.xml index d579462..a8ec6b3 100644 --- a/ShakeAndCraft/app/src/main/res/navigation/my_nav.xml +++ b/ShakeAndCraft/app/src/main/res/navigation/my_nav.xml @@ -53,5 +53,19 @@ android:id="@+id/action_homeFragment_to_bossFragment" app:destination="@id/bossFragment" app:enterAnim="@android:anim/fade_in" /> + + + + \ No newline at end of file diff --git a/ShakeAndCraft/app/src/main/res/values/colors.xml b/ShakeAndCraft/app/src/main/res/values/colors.xml index 7b76b62..d51b429 100644 --- a/ShakeAndCraft/app/src/main/res/values/colors.xml +++ b/ShakeAndCraft/app/src/main/res/values/colors.xml @@ -15,4 +15,6 @@ #ADACB2 #FF3D3D #FADB68 + #999A9F + #3A393F \ No newline at end of file