1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { _decorator, Camera, Component, isValid, Node } from 'cc';
- import { Cell } from './Cell';
- import { GameMgr } from '../../module_basic/scripts/GameMgr';
- const { ccclass, property } = _decorator;
- const TWEEN_TIME = 500;//ms
- @ccclass('GameCamera')
- export class GameCamera extends Component {
- @property(Cell) target:Cell;
- private _camera:Camera;
- public get camera():Camera{
- return this._camera;
- }
- start() {
- this._camera = this.node.getComponent(Camera);
- this._originalOrthoHeight = this._camera.orthoHeight;
- this._targetHeight = this._camera.orthoHeight;
- this._startHeight = this._targetHeight;
- this._defaultRadius = GameMgr.inst.gameData? GameMgr.inst.gameData.defaultPlayerCellRadius:375;
- }
- private _originalOrthoHeight = 1.0;
- private _defaultRadius = 1.0;
- private _tweenTimeStart = 0;
- private _startHeight = 0;
- private _targetHeight = 0;
- lateUpdate(deltaTime: number) {
- if(isValid(this.target)){
- let tp = this.target.node.worldPosition;
- let sp = this.node.worldPosition;
- this.node.setWorldPosition(tp.x,tp.y,sp.z);
- let targetSize = this.target.player.radius;
- let newHeight = this._originalOrthoHeight * (1.0 + Math.sqrt((targetSize/this._defaultRadius - 1.0)) * 0.5);
- if(this._targetHeight != newHeight){
- this._targetHeight = newHeight;
- this._startHeight = this._camera.orthoHeight;
- this._tweenTimeStart = Date.now();
- }
- }
- if(this._tweenTimeStart){
- let t = (Date.now() - this._tweenTimeStart) / TWEEN_TIME;
- if(t >= 1.0){
- this._camera.orthoHeight = this._targetHeight;
- this._tweenTimeStart = 0;
- }
- else{
- this._camera.orthoHeight = this._startHeight * (1.0 - t) + this._targetHeight * t;
- }
- }
- }
- }
|