CoreGameplay

This commit is contained in:
ThomasCharester committed 2025-11-21 20:27:11 +03:00
1 parent 5da64a7b3d
commit 388773129d
96 files changed
+4037 -2489

No files matched your search

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4911436131e345ada949f2418595bbd8
timeCreated: 1763559099
@@ -0,0 +1,20 @@
namespace Code.Gameplay.Orders.Order
{
public interface IOrderService
{
delegate void OrderProgressDelegate(float time);
event OrderProgressDelegate OnOrderGiven;
event OrderProgressDelegate OnOrderRecieved;
delegate void OrderDeliveredDelegate(int score, float time);
event OrderDeliveredDelegate OnOrderDelivered;
OrderState OrderState { get; }
void RoomPassed();
float DecreaseTimer(float delta);
void OrderGive();
void OrderRecieved();
void OrderDelivered();
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8b4467951c884c8dafeb633020696c24
timeCreated: 1763561686
@@ -0,0 +1,9 @@
namespace Code.Gameplay.Orders.Order
{
public interface IScoreService
{
int Score { get; }
void IncreaseScore(int amount);
void DecreaseScore(int amount);
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 64668c9ef4c441af84c635365cfbb2de
timeCreated: 1763559523
@@ -0,0 +1,68 @@
using System;
using Code.Configs;
using Code.Gameplay.Orders.Order;
using Cysharp.Threading.Tasks;
using Reflex.Attributes;
using UnityEngine;
namespace Code.Gameplay.Orders.Order
{
public class OrderBox : MonoBehaviour
{
[Inject] private IOrderService _orderService;
public Rigidbody rigidbody;
[SerializeField] private bool _pickupMode;
// [SerializeField] private AnimationCurve debugCurve;
//DEBUG
// private void Start()
// {
// _capturedPosition = transform.position;
// _floatingCurve = debugCurve;
// _curveLength = 1f;
// }
// DEBUG
private float _activationTime;
[Inject]
private void Construct(OrderBoxConfig config)
{
_floatingCurve = config.floatingCurve;
_activationTime = config.activationTime;
_curveLength = config.curveLength;
}
public void OnTriggerEnter(Collider other)
{
if (!_pickupMode) return;
_orderService.OrderRecieved();
Destroy(gameObject);
}
public async UniTaskVoid SwitchMode()
{
Debug.LogWarning("Activating");
await UniTask.WaitForSeconds(_activationTime);
Debug.LogWarning("Available");
_pickupMode = true;
rigidbody.isKinematic = true;
_capturedPosition = transform.position;
}
private Vector3 _capturedPosition;
private float _timeForMoving;
private AnimationCurve _floatingCurve;
private float _curveLength;
private void FixedUpdate()
{
if (!_pickupMode) return;
_timeForMoving += Time.fixedDeltaTime;
if (_timeForMoving > _curveLength) _timeForMoving = 0;
transform.position = _capturedPosition + new Vector3(0, _floatingCurve.Evaluate(_timeForMoving), 0);
Debug.Log(transform.position);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 067bc72af86a4fb8ac44d0c1fcfd25d5
timeCreated: 1763573681
@@ -0,0 +1,19 @@
using System;
using Reflex.Attributes;
using UnityEngine;
namespace Code.Gameplay.Orders.Order
{
public class OrderDeliveryTrigger : MonoBehaviour
{
[Inject] private IOrderService _orderService;
private bool _playerEntered;
private void OnTriggerEnter(Collider other)
{
if (_playerEntered) return;
_playerEntered = true;
_orderService.OrderDelivered();
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 47fbefab729047e5a11d8761e26f75a6
timeCreated: 1763737623
@@ -0,0 +1,31 @@
using DG.Tweening;
using UnityEngine;
namespace Code.Gameplay.Orders.Order
{
public class OrderDispenser : MonoBehaviour
{
[SerializeField] private Transform hatch;
[SerializeField] private OrderBox order;
private bool _activated;
public void ThrowOrder()
{
hatch.DORotate(new Vector3(-130f, 0, 0), 0.2f);
order.rigidbody.isKinematic = false;
order.rigidbody.AddForce(-transform.forward * 10f, ForceMode.Impulse);
}
// DEBUG TODO ДИМКА УДАЛИ И ПРОПИШИ В СВОЕЙ ЛОГИКЕ
public void OnTriggerEnter(Collider other)
{
if(_activated) return;
_activated = true;
ThrowOrder();
order.SwitchMode();
}
// DEBUG
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e50e3c42f5ee45e0b1087e0dbf7dd0f4
timeCreated: 1763556675
@@ -0,0 +1,18 @@
using Reflex.Attributes;
using UnityEngine;
namespace Code.Gameplay.Orders.Order
{
public class OrderGiveTrigger : MonoBehaviour
{
[Inject] private IOrderService _orderService;
private bool _playerEntered;
private void OnTriggerEnter(Collider other)
{
if (_playerEntered) return;
_playerEntered = true;
_orderService.OrderGive();
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d3966e4798d243abba9d85b9ad8aef33
timeCreated: 1763742374
@@ -0,0 +1,61 @@
using Code.Audio;
using Code.Configs;
using UnityEngine;
namespace Code.Gameplay.Orders.Order
{
public class OrderService : IOrderService
{
public event IOrderService.OrderProgressDelegate OnOrderGiven;
public event IOrderService.OrderProgressDelegate OnOrderRecieved;
public event IOrderService.OrderDeliveredDelegate OnOrderDelivered;
private OrderState _orderState;
public OrderState OrderState => _orderState;
private float _deliveryTimer = 0.0f;
private Vector2 _timeBounds;
private float _koefRooms, _koefOvertime;
private int _roomsPassed;
public OrderService(OrderServiceConfig config)
{
_orderState = OrderState.Delivered;
_timeBounds = config.timeBounds;
_koefRooms = config.koefRooms;
_koefOvertime = config.koefOvertime;
}
public void RoomPassed() => _roomsPassed++;
public float DecreaseTimer(float delta)
{
return _deliveryTimer -= delta;
}
public void OrderGive()
{
_orderState = OrderState.Given;
_roomsPassed = 0;
_deliveryTimer = Random.Range(_timeBounds.x, _timeBounds.y);
OnOrderGiven?.Invoke(_deliveryTimer);
}
public void OrderRecieved()
{
_orderState = OrderState.Recieved;
OnOrderRecieved?.Invoke(_deliveryTimer);
}
public void OrderDelivered()
{
_orderState = OrderState.Delivered;
int score = (int)(_koefRooms * _roomsPassed + _deliveryTimer * _koefOvertime);
OnOrderDelivered?.Invoke(score, _deliveryTimer);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b324c2a1be1546868cddf779445b286a
timeCreated: 1763559110
@@ -0,0 +1,9 @@
namespace Code.Gameplay.Orders.Order
{
public enum OrderState
{
Delivered,
Given,
Recieved,
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0a8980a0cc034110ab3ccd948d40956b
timeCreated: 1763559535
@@ -0,0 +1,11 @@
namespace Code.Gameplay.Orders.Order
{
public class ScoreService : IScoreService
{
private int _score;
public int Score => _score;
public void IncreaseScore(int amount) => _score += amount;
public void DecreaseScore(int amount) => _score -= amount;
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 619f2425460843aaa1f0f21e302158ce
timeCreated: 1763559528