12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import Easing from "./Easings"
- import * as RE from 'rogue-engine';
- export class TweenManager {
- activeTweens = []
- elapsed = 0
- awake() {
- }
- start() {
- this.elapsed = 0
- }
- update() {
- this.elapsed += RE.Runtime.deltaTime
- let tweensToRemove = []
- this.activeTweens.forEach(tween => {
- if(tween.update(this.elapsed)) {
- tweensToRemove.push(tween)
- }
- })
- for(let i = tweensToRemove.length - 1; i >= 0; i--) {
- this.remove(tweensToRemove[i])
- }
- }
- add(simpleTween) {
- this.activeTweens.push(simpleTween)
- simpleTween.start(this.elapsed)
- }
- remove(simpleTween) {
- delete this.activeTweens[this.activeTweens.indexOf(simpleTween)]
- }
- }
- export class SimpleTween {
- constructor(initialObject, targetProperties, duration = 1000, easingFunction = Easing.Linear.EaseNone, onComplete = () => {}) {
- this.initialObject = initialObject
- this.targetProperties = targetProperties
- this.duration = duration / 1000
- this.easingFunction = easingFunction
- this.onComplete = onComplete
- }
- start(elapsed) {
- this.copy = {}
- for(let key in this.targetProperties) {
- this.copy[key] = this.initialObject[key]
- }
- this.begin = elapsed
- }
- update(elapsed) {
- if(elapsed >= this.begin + this.duration) {
- for(let key in this.targetProperties) {
- this.initialObject[key] = this.targetProperties[key]
- }
- this.onComplete()
- return true
- }
- let delta = (elapsed - this.begin) / this.duration
- for(let key in this.targetProperties) {
- this.initialObject[key] = (this.targetProperties[key] - this.copy[key]) * this.easingFunction(delta) + this.copy[key]
- }
- return false
- }
- }
|