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
64 lines
1.7 KiB
C#
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;
|
|
|
|
}
|
|
}
|