xml sprites?????????????????????????????

This commit is contained in:
Yoshman29
2022-12-07 00:50:45 +01:00
parent 056ccf9fb0
commit b31f42bef2
10 changed files with 154 additions and 59 deletions
+13 -3
View File
@@ -5,8 +5,18 @@ function create() {
enableCameraHacks = false;
}
function postUpdate(elapsed) {
var sin = Math.sin(curBeatFloat * Math.PI / 2);
function postCreate() {
for(i in 0...6) {
var name = "tank" + Std.string(i);
stage.getSprite(name).visible = false;
}
}
camGame.angle = sin * -15;
function postUpdate(elapsed) {
// var sin = Math.sin(curBeatFloat * Math.PI / 2);
// camGame.angle = sin * -15;
if (curSection != null)
defaultCamZoom = curSection.mustHitSection ? 0.9 : 0.5;
}
File diff suppressed because one or more lines are too long
+8 -8
View File
@@ -1,33 +1,33 @@
<!DOCTYPE codename-engine-stage>
<stage zoom="0.9" name="limo" folder="stages/limo/">
<!-- BG LIMOS !-->
<sprite name="skyBG" x="-120" y="-50" sprite="limoSunset" scroll="0.1"/>
<sprite name="bgLimo" x="-200" y="480" sprite="bgLimo" scroll="0.4" />
<sprite name="skyBG" x="-120" y="-50" sprite="limoSunset" scroll="0.1" zoomfactor="0"/>
<sprite name="bgLimo" x="-200" y="480" sprite="bgLimo" scroll="0.4" zoomfactor="0.55" />
<!-- DANCERS !-->
<sprite name="dancer1" x="130" y="80" sprite="limoDancer" scroll="0.4">
<sprite name="dancer1" x="130" y="80" sprite="limoDancer" scroll="0.4" zoomfactor="0.55">
<anim name="danceLeft" anim="bg dancer sketch PINK" loop="false" indices="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" />
<anim name="danceRight" anim="bg dancer sketch PINK" loop="false" indices="15,16,17,18,19,20,21,22,23,24,25,26,27,28,29" />
</sprite>
<sprite name="dancer2" x="500" y="80" sprite="limoDancer" scroll="0.4">
<sprite name="dancer2" x="500" y="80" sprite="limoDancer" scroll="0.4" zoomfactor="0.55">
<anim name="danceLeft" anim="bg dancer sketch PINK" loop="false" indices="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" />
<anim name="danceRight" anim="bg dancer sketch PINK" loop="false" indices="15,16,17,18,19,20,21,22,23,24,25,26,27,28,29" />
</sprite>
<sprite name="dancer3" x="870" y="80" sprite="limoDancer" scroll="0.4">
<sprite name="dancer3" x="870" y="80" sprite="limoDancer" scroll="0.4" zoomfactor="0.55">
<anim name="danceLeft" anim="bg dancer sketch PINK" loop="false" indices="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" />
<anim name="danceRight" anim="bg dancer sketch PINK" loop="false" indices="15,16,17,18,19,20,21,22,23,24,25,26,27,28,29" />
</sprite>
<sprite name="dancer4" x="1240" y="80" sprite="limoDancer" scroll="0.4">
<sprite name="dancer4" x="1240" y="80" sprite="limoDancer" scroll="0.4" zoomfactor="0.55">
<anim name="danceLeft" anim="bg dancer sketch PINK" loop="false" indices="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" />
<anim name="danceRight" anim="bg dancer sketch PINK" loop="false" indices="15,16,17,18,19,20,21,22,23,24,25,26,27,28,29" />
</sprite>
<sprite name="dancer5" x="1610" y="80" sprite="limoDancer" scroll="0.4">
<sprite name="dancer5" x="1610" y="80" sprite="limoDancer" scroll="0.4" zoomfactor="0.55">
<anim name="danceLeft" anim="bg dancer sketch PINK" loop="false" indices="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" />
<anim name="danceRight" anim="bg dancer sketch PINK" loop="false" indices="15,16,17,18,19,20,21,22,23,24,25,26,27,28,29" />
</sprite>
<!-- SUPER FAST CAR !-->
<sprite name="fastCar" x="-300" y="160" sprite="fastCarLol" />
<sprite name="fastCar" x="-300" y="160" sprite="fastCarLol" zoomfactor="0.75" />
<!-- MORE LIMO STUFF !-->
<girlfriend />
+6 -6
View File
@@ -1,9 +1,9 @@
<!DOCTYPE codename-engine-stage>
<stage zoom="1.05" name="philly" folder="stages/philly/">
<sprite name="bg" x="-100" y="0" sprite="sky" scroll="0.1"/>
<sprite name="city" x="-10" y="0" sprite="city" scroll="0.3" scale="0.85" updateHitbox="true"/>
<sprite name="light" x="-10" y="0" sprite="win" scroll="0.3" scale="0.85" updateHitbox="true"/>
<sprite name="streetBehind" x="-40" y="50" sprite="behindTrain" />
<sprite name="phillyTrain" x="2000" y="360" sprite="train" />
<sprite name="street" x="-40" y="50" sprite="street" />
<sprite name="bg" x="-100" y="0" sprite="sky" scroll="0.1" zoomfactor="0"/>
<sprite name="city" x="-10" y="0" sprite="city" scroll="0.3" scale="0.85" updateHitbox="true" zoomfactor="0.3"/>
<sprite name="light" x="-10" y="0" sprite="win" scroll="0.3" scale="0.85" updateHitbox="true" zoomfactor="0.3"/>
<sprite name="streetBehind" x="-40" y="50" sprite="behindTrain" zoomfactor="1" />
<sprite name="phillyTrain" x="2000" y="360" sprite="train" zoomfactor="1" />
<sprite name="street" x="-40" y="50" sprite="street" zoomfactor="1" />
</stage>
+17 -17
View File
@@ -1,19 +1,19 @@
<!DOCTYPE codename-engine-stage>
<stage zoom="0.9" name="tank" folder="stages/tank/">
<!-- BG STUFF -->
<sprite name="tankBg" x="-500" y="0" sprite="tankBg" scroll="0"/>
<sprite name="tankSky" x="-400" y="-600" sprite="tankSky" scroll="0"/>
<sprite name="tankClouds" x="-350" y="0" sprite="tankClouds" scroll="0.1">
<sprite name="tankBg" x="-500" y="0" sprite="tankBg" scroll="0" zoomfactor="0"/>
<sprite name="tankSky" x="-400" y="-600" sprite="tankSky" scroll="0" zoomfactor="0"/>
<sprite name="tankClouds" x="-350" y="0" sprite="tankClouds" scroll="0.1" zoomfactor="0">
<property name="velocity.x" type="float" value="10" />
</sprite>
<sprite name="tankMountains" x="-300" y="-20" sprite="tankMountains" scroll="0.2" scale="1.2" updateHitbox="true"/>
<sprite name="tankBuildings" x="-300" y="-20" sprite="tankBuildings" scroll="0.3" scale="1.1" updateHitbox="true"/>
<sprite name="tankRuins" x="-200" y="0" sprite="tankRuins" scroll="0.35" scale="1.1" updateHitbox="true"/>
<sprite name="smokeLeft" x="-200" y="-100" sprite="smokeLeft" scroll="0.4"/>
<sprite name="smokeRight" x="1100" y="-100" sprite="smokeRight" scroll="0.4"/>
<sprite name="tankWatchtower" x="100" y="50" sprite="tankWatchtower" scroll="0.5" onBeat="true"/>
<sprite name="tankRolling" x="300" y="300" sprite="tankRolling" scroll="0.5"/>
<sprite name="tankGround" x="-420" y="-150" sprite="tankGround" scale="1.15" updateHitbox="true"/>
<sprite name="tankMountains" x="-300" y="-20" sprite="tankMountains" scroll="0.2" scale="1.2" updateHitbox="true" zoomfactor="0.10"/>
<sprite name="tankBuildings" x="-300" y="-20" sprite="tankBuildings" scroll="0.3" scale="1.1" updateHitbox="true" zoomfactor="0.25"/>
<sprite name="tankRuins" x="-200" y="0" sprite="tankRuins" scroll="0.35" scale="1.1" updateHitbox="true" zoomfactor="0.35"/>
<sprite name="smokeLeft" x="-200" y="-100" sprite="smokeLeft" scroll="0.4" zoomfactor="0.6"/>
<sprite name="smokeRight" x="1100" y="-100" sprite="smokeRight" scroll="0.4" zoomfactor="0.6"/>
<sprite name="tankWatchtower" x="100" y="50" sprite="tankWatchtower" scroll="0.5" onBeat="true" zoomfactor="0.7"/>
<sprite name="tankRolling" x="300" y="300" sprite="tankRolling" scroll="0.5" zoomfactor="0.8"/>
<sprite name="tankGround" x="-420" y="-150" sprite="tankGround" scale="1.15" updateHitbox="true" zoomfactor="1.0"/>
<!-- CHARACTERS -->
<girlfriend x="230" y="55"/>
@@ -21,10 +21,10 @@
<boyfriend x="810"/>
<!-- FOREGROUND TANKMANS -->
<sprite name="tank0" x="-500" y="650" sprite="tank0" scrollx="1.7" scrolly="1.5" onBeat="true"/>
<sprite name="tank1" x="-300" y="750" sprite="tank1" scrollx="2" scrolly="0.2" onBeat="true"/>
<sprite name="tank2" x="450" y="940" sprite="tank2" scroll="1.5" onBeat="true"/>
<sprite name="tank4" x="1300" y="900" sprite="tank4" scroll="1.5" onBeat="true"/>
<sprite name="tank5" x="1620" y="700" sprite="tank5" scroll="1.5" onBeat="true"/>
<sprite name="tank3" x="1300" y="1200" sprite="tank3" scrollx="3.5" scrolly="2.5" onBeat="true"/>
<sprite name="tank0" x="-500" y="650" sprite="tank0" scrollx="1.7" scrolly="1.5" onBeat="true" zoomfactor="1.25"/>
<sprite name="tank1" x="-300" y="750" sprite="tank1" scrollx="2" scrolly="0.2" onBeat="true" zoomfactor="1.25"/>
<sprite name="tank2" x="450" y="940" sprite="tank2" scroll="1.5" onBeat="true" zoomfactor="1.25"/>
<sprite name="tank4" x="1300" y="900" sprite="tank4" scroll="1.5" onBeat="true" zoomfactor="1.25"/>
<sprite name="tank5" x="1620" y="700" sprite="tank5" scroll="1.5" onBeat="true" zoomfactor="1.25"/>
<sprite name="tank3" x="1300" y="1200" sprite="tank3" scrollx="3.5" scrolly="2.5" onBeat="true" zoomfactor="1.25"/>
</stage>
+1 -1
View File
@@ -1 +1 @@
1400
1415
+3
View File
@@ -58,6 +58,9 @@ class Stage extends FlxBasic implements IBeatReceiver {
if (!node.has.sprite || !node.has.name || !node.has.x || !node.has.y) continue;
var spr = XMLUtil.createSpriteFromXML(node, spritesParentFolder);
if (!node.has.zoomfactor && PlayState.instance != null)
spr.initialZoom = PlayState.instance.defaultCamZoom;
stageSprites.set(spr.name, spr);
state.add(spr);
+10 -4
View File
@@ -460,15 +460,21 @@ class ShaderTemplates {
}
uniform vec4 _camSize;
float map(float value, float min1, float max1, float min2, float max2) {
return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
}
vec2 getCamPos(vec2 pos) {
return (pos * openfl_TextureSize / vec2(_camSize.z, _camSize.w)) + vec2(_camSize.x / _camSize.z, _camSize.y / _camSize.z);
vec4 size = _camSize / vec4(openfl_TextureSize, openfl_TextureSize);
return vec2(map(pos.x, size.x, size.x + size.z, 0.0, 1.0), map(pos.y, size.y, size.y + size.w, 0.0, 1.0));
}
vec2 camToOg(vec2 pos) {
return ((pos - vec2(_camSize.x / _camSize.z, _camSize.y / _camSize.z)) * vec2(_camSize.z, _camSize.w) / openfl_TextureSize);
vec4 size = _camSize / vec4(openfl_TextureSize, openfl_TextureSize);
return vec2(map(pos.x, 0.0, 1.0, size.x, size.x + size.z), map(pos.y, 0.0, 1.0, size.y, size.y + size.w));
}
vec4 textureCam(sampler2D bitmap, vec2 pos) {
return texture2D(bitmap, camToOg(pos));
return flixel_texture2D(bitmap, camToOg(pos));
}";
public static final fragBody:String = "vec4 color = texture2D (bitmap, openfl_TextureCoordv);
+93
View File
@@ -0,0 +1,93 @@
package funkin.system;
import flixel.math.FlxMatrix;
import flixel.math.FlxRect;
import flixel.math.FlxPoint;
import flixel.FlxCamera;
import flixel.math.FlxMath;
import funkin.interfaces.IBeatReceiver;
import flixel.FlxSprite;
class XMLSprite extends FlxSprite implements IBeatReceiver {
public var beatAnims:Array<String> = [];
public var name:String;
public var zoomFactor:Float = 1;
public var initialZoom:Float = 1;
public override function update(elapsed:Float) {
super.update(elapsed);
}
public function beatHit(curBeat:Int) {
if (beatAnims.length > 0) {
var anim = beatAnims[FlxMath.wrap(curBeat, 0, beatAnims.length-1)];
if (anim != null && anim != "null" && anim != "none")
animation.play(anim);
}
}
public function stepHit(curBeat:Int) {}
public override function getScreenBounds(?newRect:FlxRect, ?camera:FlxCamera):FlxRect {
__doPreZoomScaleProcedure(camera);
var r = super.getScreenBounds(newRect, camera);
__doPostZoomScaleProcedure();
return r;
}
public override function drawComplex(camera:FlxCamera) {
super.drawComplex(camera);
}
public override function doAdditionalMatrixStuff(matrix:FlxMatrix, camera:FlxCamera) {
super.doAdditionalMatrixStuff(matrix, camera);
matrix.translate(-camera.width / 2, -camera.height / 2);
var requestedZoom = FlxMath.lerp(1, camera.zoom, zoomFactor);
var diff = requestedZoom / camera.zoom;
matrix.scale(diff, diff);
matrix.translate(camera.width / 2, camera.height / 2);
}
public override function getScreenPosition(?point:FlxPoint, ?Camera:FlxCamera):FlxPoint {
if (__shouldDoScaleProcedure()) {
__oldScale = FlxPoint.get(scrollFactor.x, scrollFactor.y);
var requestedZoom = FlxMath.lerp(initialZoom, camera.zoom, zoomFactor);
var diff = requestedZoom / camera.zoom;
scrollFactor.scale(1/diff);
var r = super.getScreenPosition(point, Camera);
scrollFactor.set(__oldScale.x, __oldScale.y);
__oldScale.put();
__oldScale = null;
return r;
}
return super.getScreenPosition(point, Camera);
}
// SCALING FUNCS
#if REGION
private inline function __shouldDoScaleProcedure()
return zoomFactor != 1;
var __oldScale:FlxPoint;
var __skipZoomProcedure:Bool = false;
private function __doPreZoomScaleProcedure(camera:FlxCamera) {
if (__skipZoomProcedure = !__shouldDoScaleProcedure()) return;
__oldScale = FlxPoint.get(scale.x, scale.y);
var requestedZoom = FlxMath.lerp(initialZoom, camera.zoom, zoomFactor);
var diff = requestedZoom / camera.zoom;
scale.scale(diff);
}
private function __doPostZoomScaleProcedure() {
if (__skipZoomProcedure) return;
scale.set(__oldScale.x, __oldScale.y);
__oldScale.put();
__oldScale = null;
}
#end
}
+2 -19
View File
@@ -77,6 +77,8 @@ class XMLUtil {
}
if (node.has.updateHitbox && node.att.updateHitbox == "true") spr.updateHitbox();
spr.zoomFactor = Std.parseFloat(node.getAtt("zoomfactor")).getDefault(spr.zoomFactor);
for(anim in node.nodes.anim)
addXMLAnimation(spr, anim);
@@ -139,23 +141,4 @@ typedef AnimData = {
var x:Float;
var y:Float;
var indices:Array<Int>;
}
class XMLSprite extends FlxSprite implements IBeatReceiver {
public var beatAnims:Array<String> = [];
public var name:String;
public override function update(elapsed:Float) {
super.update(elapsed);
}
public function beatHit(curBeat:Int) {
if (beatAnims.length > 0) {
var anim = beatAnims[FlxMath.wrap(curBeat, 0, beatAnims.length-1)];
if (anim != null && anim != "null" && anim != "none")
animation.play(anim);
}
}
public function stepHit(curBeat:Int) {}
}