Skip to content

Olsney/RSG_Test_Task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🧪 RSG Test Task — My Solution

🎮 Playtest-ready version of the technical test task for a Unity Developer position.
This project showcases my implementation of all the required features along with extra polish:
✅ UI (built with MVP pattern)
✅ Visual improvements with DOTween
✅ Custom logic for loot, healing, inventory, and combat

📌 Pull Request with all changes:
👉 View on GitHub

preview


📋 Project Concept

🇺🇦 Гравець потрапляє у гру, де може:

  • Вийти на арену Dungeon та вбивати скелетів
  • Збирати з них лут (книги, зілля)
  • Повертатися на Surface та продавати лут трейдеру

✅ Completed Tasks

🔹 Task #1 – Обмежити кількість предметів в інвентарі.

Зараз гравець може зібрати нескінченну кількість предметів в інвентар, потрібно зробити так, щоб кожен предмет мав свою вагу і встановити максимальну вагу яку може переносити Entity. Якщо предмет вже не влізає - він не підбирається. Поради

  • Можливо потрібно змінити саму логіку IStorage і додати підтримку ваги, перевірку чи може влізти предмет туди.
  • Логіку як предмети збираються можна знайти в LootInteractable та в GatherLootEntityBehaviour.

🔹 Task #2 – Баг. При переході з данжа на локацію всі предмети з інвентарю пропадають.

Якщо зібрати предметі під час перебування в Dungeon, то при переході на поверхню вони всі пропадуть. Тому ми навіть не можемо їх продати продавцю.

Поради

  • Місце, де повинна зберігатись інформація про предмети гравця повинно знаходитись в GlobalSceneContext.
  • Краще всього створити окрему модель (за прикладом PlayerCameraModel) - де зберігається інформація про предмети які є у гравця.

🔹 Task #3 – Відобразити кількість предметів які у гравця в інвентарі на UI.

Зараз не зрозуміло чи гравець взагалі підібрав предмети, потрібно на екрані відобразити скільки предметів зараз несе гравець, щоб було видно і коли він продає ці предмети.

Поради

  • Для відображення UI краще використовувати якийсь з шаблонів MVx для проектування інтерфейсу - наприклад MVP. 🧩 MVP-підхід для реалізації інтерфейсу.

🔹 Task #4 – Відобразити здоров’я гравця на UI.

Зараз не зрозуміло чи вороги взагалі наносять пошкодження гравцеві. Потрібно відобразити HealthBar на UI. Здоро’я не повинно скидуватись при переході на поверхню

Поради

  • Здоров’я гравця зберігається в його IDamageable

🔹 Task #5 – Додати баланс грошей гравця.

Зараз нікуди не начислюються монети, які отримує гравець коли продає предмети продавцеві. Потрібно створити баланс гравця і також відобразити його на UI.

Поради

  • Trader повертає суму цін предметів в інвентарі

🔹 Task #6 – Додати можливість використовувати HealPotion для лікування.

Гравець збирає зілля з мертвих ворогів, потрібно додати можливість їх використання для лікування.

Поради

  • Використання зілля краще зробити як на UI кнопку, так і на кнопці на клавіатурі використовуючи NewInputSystem.
  • В ідеалі відобразити скільки HealPotion у тебе залишилось.
  • Зараз при взаємодії з продавцем ти продаси всі предмети, що є в інвентарі, можливо потрібно продавати тільки книги

🔹 Task #7 – Рандомізувати випадіння предметів з ворогів.

Зараз там в 100% випадках випадає одна книжка і один HealPotion. Потрібно додати рандом і шанс випадіння якогось одного предмету, вказаного в списку.


🔹 Task #8 – Додати покупку Heal Potion у Trader.

Потрібно додати місце, куди можна витратити гроші, які накопив гравець, продаючи предмети. Потрібно біля трейдера поставити прилавок з зіллями, при взаємодії з якими можна його купити.


🔹 Task #9 – Додати можливість розбити коробку.

На SurfaceScene стоять коробки, з якими не можна взаємодіяти. Потрібно при взаємодії з ними направити гравця, щоб він атакував коробки та щоб коли вони розбились то з них випав лут.

Поради

  • Така логіка вже є у ворогів

📚 Додаткові вимоги

  • Вивчити документацію з плагіна Zenject
  • Вивчити документацію по Addressables — в проекті потрібно їх використовувати
  • Вивчити документацію по самому проекту

🧩 Technologies & Extras

  • 🎯 MVP architecture for UI
  • 💥 DOTween for animations
  • 🧠 Modular code for easy testing and scaling
  • 🔄 Scene persistence via Zenject GlobalSceneContext
  • 🧪 Fully working prototype ready for playtest

💡 If you're a recruiter or lead developer — feel free to explore the pull request to check my code structure and decisions.


About

With MVP Passive View

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published