first commit

This commit is contained in:
2026-04-07 03:14:32 +03:00
commit b3992fec6b
1026 changed files with 366769 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BalanceScale : MonoBehaviour
{
[SerializeField] private Transform[] _leftSlots;
[SerializeField] private Transform[] _rightSlots;
[SerializeField] private Transform[] _scaleMarks;
[SerializeField] private Transform _slider;
[SerializeField] private float _animationSpeed = 2f;
private Transform[] _leftOccupied;
private Transform[] _rightOccupied;
private Vector3 _targetSliderPos;
private void Awake()
{
_leftOccupied = new Transform[_leftSlots.Length];
_rightOccupied = new Transform[_rightSlots.Length];
if (_slider != null)
_targetSliderPos = _slider.localPosition;
}
private void Update()
{
if (_slider == null) return;
_slider.localPosition = Vector3.Lerp(
_slider.localPosition,
_targetSliderPos,
Time.deltaTime * _animationSpeed
);
}
public void PlaceLeft(Transform obj)
{
Place(obj, _leftSlots, _leftOccupied);
}
public void PlaceRight(Transform obj)
{
Place(obj, _rightSlots, _rightOccupied);
}
private void Place(Transform obj, Transform[] slots, Transform[] occupied)
{
for (int i = 0; i < occupied.Length; i++)
if (occupied[i] == obj) occupied[i] = null;
for (int i = 0; i < slots.Length; i++)
{
if (occupied[i] == null)
{
occupied[i] = obj;
obj.SetParent(null);
Collider col = slots[i].GetComponent<Collider>();
Vector3 targetPos = col != null ? col.bounds.center : slots[i].position;
obj.position = targetPos;
obj.rotation = slots[i].rotation;
UpdateSlider();
return;
}
}
obj.SetParent(null, true);
}
public void RemoveObject(Transform obj)
{
for (int i = 0; i < _leftOccupied.Length; i++)
if (_leftOccupied[i] == obj) _leftOccupied[i] = null;
for (int i = 0; i < _rightOccupied.Length; i++)
if (_rightOccupied[i] == obj) _rightOccupied[i] = null;
UpdateSlider();
}
private float GetMass(Transform[] occupied)
{
float total = 0f;
foreach (var obj in occupied)
{
if (obj == null) continue;
LiquidContainer lc = obj.GetComponent<LiquidContainer>()
?? obj.GetComponentInChildren<LiquidContainer>();
Rigidbody rb = obj.GetComponent<Rigidbody>();
if (lc != null) total += lc.GetTotalMassKg();
else if (rb != null) total += rb.mass;
}
return total;
}
private void UpdateSlider()
{
if (_scaleMarks == null || _scaleMarks.Length == 0) return;
float leftMass = GetMass(_leftOccupied);
float rightMass = GetMass(_rightOccupied);
float displayMass = Mathf.Max(leftMass, rightMass);
int targetIndex = Mathf.Clamp(Mathf.RoundToInt(displayMass), 0, _scaleMarks.Length - 1);
_targetSliderPos = _slider.parent != null
? _slider.parent.InverseTransformPoint(_scaleMarks[targetIndex].position)
: _scaleMarks[targetIndex].position;
}
}