FunkinSprite

This commit is contained in:
Yoshman29
2023-01-06 18:02:10 +01:00
parent 676f9e6741
commit b05d4b6018
5 changed files with 60 additions and 45 deletions
+1 -1
View File
@@ -177,7 +177,7 @@ class Conductor
// update conductor
__timeUntilUpdate = -(lastSongPosTime - (lastSongPosTime = mainTime));
__elapsedAL = (lastSongPos - lastPos);
destSpeed = FlxMath.bound(__elapsedAL / __timeUntilUpdate, 0.925, 1.075);
destSpeed = FlxMath.bound(__timeUntilUpdate / __elapsedAL, 0.925, 1.075);
songPosition = lastSongPos;
} else {
songPosition += elapsed * 1000 * speed;
@@ -1,5 +1,7 @@
package funkin.system;
import funkin.scripting.events.PlayAnimEvent.PlayAnimContext;
import funkin.interfaces.IOffsetCompatible;
import flixel.math.FlxMatrix;
import flixel.math.FlxRect;
import flixel.math.FlxPoint;
@@ -24,7 +26,7 @@ abstract XMLAnimType(Int) {
}
}
class XMLSprite extends FlxSprite implements IBeatReceiver {
class FunkinSprite extends FlxSprite implements IBeatReceiver implements IOffsetCompatible {
public var spriteAnimType:XMLAnimType = NONE;
public var beatAnims:Array<String> = [];
public var name:String;
@@ -39,7 +41,7 @@ class XMLSprite extends FlxSprite implements IBeatReceiver {
if (beatAnims.length > 0) {
var anim = beatAnims[FlxMath.wrap(curBeat, 0, beatAnims.length-1)];
if (anim != null && anim != "null" && anim != "none")
animation.play(anim);
playAnim(anim);
}
}
public function stepHit(curBeat:Int) {}
@@ -107,4 +109,41 @@ class XMLSprite extends FlxSprite implements IBeatReceiver {
__oldScale = null;
}
#end
// OFFSETTING
#if REGION
public var animOffsets:Map<String, FlxPoint> = new Map<String, FlxPoint>();
public function addOffset(name:String, x:Float = 0, y:Float = 0)
{
animOffsets[name] = new FlxPoint(x, y);
}
public function switchOffset(anim1:String, anim2:String) {
var old = animOffsets[anim1];
animOffsets[anim1] = animOffsets[anim2];
animOffsets[anim2] = old;
}
#end
// PLAYANIM
#if REGION
public var lastAnimContext:PlayAnimContext = DANCE;
public function playAnim(AnimName:String, Force:Bool = false, Context:PlayAnimContext = NONE, Reversed:Bool = false, Frame:Int = 0):Void
{
if (AnimName == null || !animation.exists(AnimName)) return;
animation.play(AnimName, Force, Reversed, Frame);
var daOffset = getAnimOffset(AnimName);
rotOffset.set(daOffset.x, daOffset.y);
lastAnimContext = Context;
}
public inline function getAnimOffset(name:String) {
if (animOffsets[name] != null)
return animOffsets[name];
return FlxPoint.weak(0, 0);
}
#end
}
+7 -7
View File
@@ -1,6 +1,6 @@
package funkin.system;
import funkin.system.XMLSprite.XMLAnimType;
import funkin.system.FunkinSprite.XMLAnimType;
import flixel.math.FlxMath;
import funkin.interfaces.IBeatReceiver;
import haxe.xml.Access;
@@ -45,10 +45,10 @@ class XMLUtil {
/**
* Creates a new sprite based on a XML node.
*/
public static function createSpriteFromXML(node:Access, parentFolder:String = "", defaultAnimType:XMLAnimType = BEAT, ?cl:Class<XMLSprite>):XMLSprite {
public static function createSpriteFromXML(node:Access, parentFolder:String = "", defaultAnimType:XMLAnimType = BEAT, ?cl:Class<FunkinSprite>):FunkinSprite {
if (parentFolder == null) parentFolder = "";
var spr:XMLSprite = cl != null ? Type.createInstance(cl, []) : new XMLSprite();
var spr:FunkinSprite = cl != null ? Type.createInstance(cl, []) : new FunkinSprite();
spr.name = node.getAtt("name");
spr.antialiasing = true;
@@ -127,8 +127,8 @@ class XMLUtil {
*/
public static function addXMLAnimation(sprite:FlxSprite, anim:Access, loop:Bool = false):ErrorCode {
var animType:XMLAnimType = NONE;
if (sprite is XMLSprite)
animType = cast(sprite, XMLSprite).spriteAnimType;
if (sprite is FunkinSprite)
animType = cast(sprite, FunkinSprite).spriteAnimType;
return addAnimToSprite(sprite, extractAnimFromXML(anim, animType, loop));
}
@@ -145,8 +145,8 @@ class XMLUtil {
if (sprite is IOffsetCompatible)
cast(sprite, IOffsetCompatible).addOffset(animData.name, animData.x, animData.y);
if (sprite is XMLSprite) {
var xmlSpr = cast(sprite, XMLSprite);
if (sprite is FunkinSprite) {
var xmlSpr = cast(sprite, FunkinSprite);
switch(animData.animType) {
case BEAT:
xmlSpr.beatAnims.push(animData.name);