refactor animations
- update walking animation - add running, rotating animation - add natural speed for animations
This commit is contained in:
parent
8797cb6664
commit
d27b9e6493
|
|
@ -15,6 +15,7 @@ class AnimationHandle {
|
||||||
this.speed = this._speed = 1.0;
|
this.speed = this._speed = 1.0;
|
||||||
this._lastChange = null;
|
this._lastChange = null;
|
||||||
this._lastChangeX = null;
|
this._lastChangeX = null;
|
||||||
|
this._animationNaturalSpeed = animation.naturalSpeed;
|
||||||
}
|
}
|
||||||
play(player, time) {
|
play(player, time) {
|
||||||
if (this._lastChange === null) {
|
if (this._lastChange === null) {
|
||||||
|
|
@ -31,7 +32,7 @@ class AnimationHandle {
|
||||||
}
|
}
|
||||||
if (this.paused === false) {
|
if (this.paused === false) {
|
||||||
let dt = time - this._lastChange;
|
let dt = time - this._lastChange;
|
||||||
let x = this._lastChangeX + this.speed * dt;
|
let x = this._lastChangeX + (this.speed * this._animationNaturalSpeed) * dt;
|
||||||
invokeAnimation(this.animation, player, x);
|
invokeAnimation(this.animation, player, x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -55,17 +56,74 @@ class CompositeAnimation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let WalkAnimation = (player, time) => {
|
let WalkingAnimation = (player, time) => {
|
||||||
let skin = player.skin;
|
let skin = player.skin;
|
||||||
let angleRot = time + Math.PI / 2;
|
|
||||||
|
|
||||||
// Leg Swing
|
// Leg swing
|
||||||
skin.leftLeg.rotation.x = Math.cos(angleRot);
|
skin.leftLeg.rotation.x = Math.sin(time) * 0.3;
|
||||||
skin.rightLeg.rotation.x = Math.cos(angleRot + (Math.PI));
|
skin.rightLeg.rotation.x = Math.sin(time + Math.PI) * 0.3;
|
||||||
|
|
||||||
// Arm Swing
|
// Arm swing
|
||||||
skin.leftArm.rotation.x = Math.cos(angleRot + (Math.PI));
|
skin.leftArm.rotation.x = Math.sin(time + Math.PI) * 0.5;
|
||||||
skin.rightArm.rotation.x = Math.cos(angleRot);
|
skin.rightArm.rotation.x = Math.sin(time) * 0.5;
|
||||||
|
let basicArmRotationZ = Math.PI * 0.02;
|
||||||
|
skin.leftArm.rotation.z = Math.cos(time) * 0.03 + basicArmRotationZ;
|
||||||
|
skin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.03 - basicArmRotationZ;
|
||||||
|
|
||||||
|
// Head shaking with different frequency & amplitude
|
||||||
|
skin.head.rotation.y = Math.sin(time / 2) * 0.2;
|
||||||
|
skin.head.rotation.x = Math.sin(time / 3) * 0.15;
|
||||||
|
|
||||||
|
// Always add an angle for cape around the x axis
|
||||||
|
let basicCapeRotationX = Math.PI * 0.06;
|
||||||
|
player.cape.rotation.x = Math.sin(time / 1.5) * 0.06 + basicCapeRotationX;
|
||||||
};
|
};
|
||||||
|
|
||||||
export { CompositeAnimation, WalkAnimation, invokeAnimation };
|
WalkingAnimation.naturalSpeed = 5;
|
||||||
|
|
||||||
|
let RunningAnimation = (player, time) => {
|
||||||
|
let skin = player.skin;
|
||||||
|
|
||||||
|
// Leg swing with larger amplitude
|
||||||
|
skin.leftLeg.rotation.x = Math.cos(time + Math.PI) * 1.3;
|
||||||
|
skin.rightLeg.rotation.x = Math.cos(time) * 1.3;
|
||||||
|
|
||||||
|
// Arm swing
|
||||||
|
skin.leftArm.rotation.x = Math.cos(time) * 1.5;
|
||||||
|
skin.rightArm.rotation.x = Math.cos(time + Math.PI) * 1.5;
|
||||||
|
let basicArmRotationZ = Math.PI * 0.1;
|
||||||
|
skin.leftArm.rotation.z = Math.cos(time) * 0.1 + basicArmRotationZ;
|
||||||
|
skin.rightArm.rotation.z = Math.cos(time + Math.PI) * 0.1 - basicArmRotationZ;
|
||||||
|
|
||||||
|
// Jumping
|
||||||
|
player.position.y = Math.cos(time * 2);
|
||||||
|
// Dodging when running
|
||||||
|
player.position.x = Math.cos(time) * 0.15;
|
||||||
|
// Slightly tilting when running
|
||||||
|
player.rotation.z = Math.cos(time + Math.PI) * 0.01;
|
||||||
|
|
||||||
|
// Apply higher swing frequency, lower amplitude,
|
||||||
|
// and greater basic rotation around x axis,
|
||||||
|
// to cape when running.
|
||||||
|
let basicCapeRotationX = Math.PI * 0.3;
|
||||||
|
player.cape.rotation.x = Math.sin(time * 2) * 0.1 + basicCapeRotationX;
|
||||||
|
|
||||||
|
// What about head shaking?
|
||||||
|
// You shouldn't glance right and left when running dude :P
|
||||||
|
};
|
||||||
|
|
||||||
|
RunningAnimation.naturalSpeed = 13;
|
||||||
|
|
||||||
|
let RotatingAnimation = (player, time) => {
|
||||||
|
player.rotation.y = time;
|
||||||
|
};
|
||||||
|
|
||||||
|
RotatingAnimation.naturalSpeed = 1;
|
||||||
|
|
||||||
|
export {
|
||||||
|
CompositeAnimation,
|
||||||
|
invokeAnimation,
|
||||||
|
WalkingAnimation,
|
||||||
|
RunningAnimation,
|
||||||
|
RotatingAnimation
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
export { SkinObject, CapeObject, PlayerObject } from "./model";
|
export { SkinObject, CapeObject, PlayerObject } from "./model";
|
||||||
export { SkinViewer, SkinControl } from "./viewer";
|
export { SkinViewer, MouseControl } from "./viewer";
|
||||||
export { invokeAnimation, CompositeAnimation, WalkAnimation } from "./animation";
|
export {
|
||||||
|
invokeAnimation,
|
||||||
|
CompositeAnimation,
|
||||||
|
WalkingAnimation,
|
||||||
|
RunningAnimation,
|
||||||
|
RotatingAnimation
|
||||||
|
} from "./animation";
|
||||||
|
|
|
||||||
|
|
@ -29,3 +29,5 @@ export class CompositeAnimation implements IAnimation {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WalkAnimation: AnimationFn;
|
export const WalkAnimation: AnimationFn;
|
||||||
|
export const RunningAnimation: AnimationFn;
|
||||||
|
export const RotatingAnimation: AnimationFn;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue