gather-and-defend/Assets/Scripts/KeepLevelAnchored.cs
Felix Boucher 8adc563d47 make transition fool proof
problème :
Il y avait plusieurs manières de faire planter le loading screen en appuyant sur des boutons

changements:
- turn off buttons when loading screen is active
- turn on buttons when loading screen is not active
- add event aggregator class to project and migrate every event to it
- fix bugs and regressions
2023-10-09 22:21:06 -04:00

64 lines
1.7 KiB
C#

using GatherAndDefend.Events;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static LevelManager;
public class KeepLevelAnchored : MonoBehaviour
{
Camera _camera;
Rect _levelBound;
bool _boundCalculated = false;
// Start is called before the first frame update
void Start()
{
_camera = Camera.main;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);
if (!LevelManager.Instance.CurrentLevel) return;
CalculateBound(LevelManager.Instance.CurrentLevel);
}
private void CalculateBound(GatherAndDefend.LevelEditor.Level level)
{
_boundCalculated = false;
_levelBound = level.CalculateBounds();
_boundCalculated = true;
}
void OnDestroy()
{
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);
}
// Update is called once per frame
void Update()
{
if (!_boundCalculated) return;
//move right
var xMax = _levelBound.xMax;
var width = _camera.ScreenToWorldPoint(Vector2.one * _camera.pixelWidth).x;
var rightDiff = width - xMax;
var camPos = _camera.transform.position;
camPos.x -= rightDiff;
_camera.transform.position = camPos;
//resize
var xMin = _levelBound.xMin;
var left = _camera.ScreenToWorldPoint(Vector2.zero).x;
var center = _camera.ScreenToWorldPoint(Vector2.one * _camera.pixelWidth / 3).x;
var leftDiff = xMax - xMin;
var centerDiff = xMax - center;
var ratio = centerDiff / leftDiff;
_camera.orthographicSize /= ratio;
return;
}
}