Fix depth offsets for sprite with non-zero ZRamp.

Bibs and other effects that should be drawn at ground level
can now simply define ZRamp: 1, Offset: <X>,<Y>,1, avoiding the
need to account for the Y offset or internal sprite offsets.
This commit is contained in:
Paul Chote
2021-07-24 23:39:08 +01:00
committed by reaperrr
parent 27f9f35efb
commit be3412ee74
9 changed files with 73 additions and 99 deletions

View File

@@ -288,11 +288,18 @@ namespace OpenRA.Mods.Common.Graphics
};
var subSrc = GetSpriteSrc(modData, tileSet, sequence, animation, sub.Key, sd);
var subSprites = cache[subSrc, subGetUsedFrames].Select(
s => s != null ? new Sprite(s.Sheet,
FlipRectangle(s.Bounds, subFlipX, subFlipY), ZRamp,
new float3(subFlipX ? -s.Offset.X : s.Offset.X, subFlipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + subOffset + offset,
s.Channel, blendMode) : null).ToList();
var subSprites = cache[subSrc, subGetUsedFrames].Select(s =>
{
if (s == null)
return null;
var bounds = FlipRectangle(s.Bounds, subFlipX, subFlipY);
var dx = subOffset.X + offset.X + (subFlipX ? -s.Offset.X : s.Offset.X);
var dy = subOffset.Y + offset.Y + (subFlipY ? -s.Offset.Y : s.Offset.Y);
var dz = subOffset.Z + offset.Z + s.Offset.Z + ZRamp * dy;
return new Sprite(s.Sheet, bounds, ZRamp, new float3(dx, dy, dz), s.Channel, blendMode);
}).ToList();
var frames = subFrames != null ? subFrames.Skip(subStart).Take(subLength).ToArray() : Exts.MakeArray(subLength, i => subStart + i);
combined = combined.Concat(frames.Select(i => subSprites[i]));
@@ -306,11 +313,18 @@ namespace OpenRA.Mods.Common.Graphics
// Apply offset to each sprite in the sequence
// Different sequences may apply different offsets to the same frame
var src = GetSpriteSrc(modData, tileSet, sequence, animation, info.Value, d);
sprites = cache[src, getUsedFrames].Select(
s => s != null ? new Sprite(s.Sheet,
FlipRectangle(s.Bounds, flipX, flipY), ZRamp,
new float3(flipX ? -s.Offset.X : s.Offset.X, flipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + offset,
s.Channel, blendMode) : null).ToArray();
sprites = cache[src, getUsedFrames].Select(s =>
{
if (s == null)
return null;
var bounds = FlipRectangle(s.Bounds, flipX, flipY);
var dx = offset.X + (flipX ? -s.Offset.X : s.Offset.X);
var dy = offset.Y + (flipY ? -s.Offset.Y : s.Offset.Y);
var dz = offset.Z + s.Offset.Z + ZRamp * dy;
return new Sprite(s.Sheet, bounds, ZRamp, new float3(dx, dy, dz), s.Channel, blendMode);
}).ToArray();
}
alpha = LoadField(d, "Alpha", (float[])null);

View File

@@ -264,9 +264,6 @@ GAWEAP:
WithIdleOverlay@TURBINES:
RequiresCondition: !build-incomplete
Sequence: idle-turbines
WithIdleOverlay@BIB:
RequiresCondition: !build-incomplete
Sequence: bib
WithMakeOverlay@MAKE-BRIGHT:
Sequence: make-bright
Palette: bright

View File

@@ -231,9 +231,6 @@ NAWEAP:
RequiresCondition: !build-incomplete && !empdisable
Sequence: idle-lights-bright
Palette: bright
WithIdleOverlay@BIB:
RequiresCondition: !build-incomplete
Sequence: bib
Power:
Amount: -30
ProvidesPrerequisite@buildingname:

View File

@@ -20,12 +20,12 @@ apache:
rotor: harpyrotor
Start: 32
Length: 31
Offset: 0, 0, 16
Offset: 0, 0, 32
ZRamp: 1
Tick: 25
slow-rotor: harpyrotor
Length: 31
Offset: 0, 0, 16
Offset: 0, 0, 32
ZRamp: 1
Tick: 50

View File

@@ -4,7 +4,7 @@
UseTilesetExtension: true
Start: 1
ZRamp: 1
Offset: 0, 0, 0.5
Offset: 0, 0, 1
lobrdg_a:
Inherits: ^bridge
@@ -68,7 +68,7 @@ bridge1:
# ShadowStart: 18
UseTilesetExtension: true
ZRamp: 1
Offset: 0, -13, 3.5
Offset: 0, -13, 49
bridge2:
idle: bridge
@@ -77,7 +77,7 @@ bridge2:
# ShadowStart: 27
UseTilesetExtension: true
ZRamp: 1
Offset: 0, -25, 3.5
Offset: 0, -25, 49
railbrdg1:
idle: railbrdg
@@ -85,7 +85,7 @@ railbrdg1:
# ShadowStart: 18
UseTilesetExtension: true
ZRamp: 1
Offset: 0, -13, 3.5
Offset: 0, -13, 49
railbrdg2:
idle: railbrdg
@@ -94,4 +94,4 @@ railbrdg2:
# ShadowStart: 27
UseTilesetExtension: true
ZRamp: 1
Offset: 0, -25, 3.5
Offset: 0, -25, 49

View File

@@ -72,19 +72,19 @@ mpspawn:
idle:
Length: *
ZRamp: 1
Offset: 0, 0, 24
Offset: 0, 0, 1
waypoint:
idle:
Length: *
ZRamp: 1
Offset: 0, 0, 24
Offset: 0, 0, 1
camera:
idle:
Length: *
ZRamp: 1
Offset: 0, 0, 24
Offset: 0, 0, 1
clock:
idle: gclock2
@@ -144,32 +144,26 @@ explosion:
IgnoreWorldTint: False
ionbeam: ionbeam
Offset: 0, -60, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
ionbeam2: ionbeam
Offset: 0, -180, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
ionbeam3: ionbeam
Offset: 0, -300, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
ionbeam4: ionbeam
Offset: 0, -420, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
ionbeam5: ionbeam
Offset: 0, -540, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
ionbeam6: ionbeam
Offset: 0, -660, 60
ZRamp: 1
Tick: 100
IgnoreWorldTint: False
pulse_explosion: pulsefx2
@@ -367,7 +361,6 @@ moveflsh:
Length: *
Tick: 30
ZOffset: 2047
Offset: 0, 0, 48
ZRamp: 1
AlphaFade: True
@@ -385,7 +378,7 @@ resources:
UseTilesetExtension: true
Length: 12
ShadowStart: 12
Offset: 0, -12, 1.5
Offset: 0, -12, 1
ZRamp: 1
IgnoreWorldTint: true
tib01: tib01
@@ -411,8 +404,6 @@ resources:
veins: veins
Length: *
ShadowStart: -1
# TODO: Reduce z offset again after fixing #12229
Offset: 0, -12, 5.5
IgnoreWorldTint: false
veins:
@@ -679,22 +670,22 @@ tracks16:
tuntop01:
Inherits: ^tuntop
idle:
Offset: 24, -49, 36
Offset: 24, -49, 48
tuntop02:
Inherits: ^tuntop
idle:
Offset: -24, -49, 36
Offset: -24, -49, 48
tuntop03:
Inherits: ^tuntop
idle:
Offset: 24, -49, 24
Offset: 24, -49, 49
tuntop04:
Inherits: ^tuntop
idle:
Offset: -24, -49, 24
Offset: -24, -49, 49
dig:
idle:

View File

@@ -206,15 +206,15 @@ gaweap:
DepthSprite: isodepth.shp
idle: gtweap_1
ShadowStart: 2
Offset: -12, -42, 1
ZOffset: -1024
Offset: -12, -42, 0
ZRamp: 1
-DepthSprite:
damaged-idle: gtweap_1
Start: 1
ShadowStart: 3
ZOffset: -1024
Offset: -12, -42, 0
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
idle-roof: gtweap_2
@@ -270,26 +270,6 @@ gaweap:
Offset: -12, -42, 44
DepthSpriteOffset: -12, 0
IgnoreWorldTint: True
bib: gtweapbb
Length: 1
ZOffset: -1024
Offset: -12, -42, 0
ZRamp: 1
-DepthSprite:
damaged-bib: gtweapbb
Start: 1
Length: 1
ZOffset: -1024
Offset: -12, -42, 0
ZRamp: 1
-DepthSprite:
dead-bib: gtweapbb
Start: 2
Length: 1
ZOffset: -1024
Offset: -12, -42, 0
ZRamp: 1
-DepthSprite:
emp-overlay: emp_fx01
Length: *
Offset: 0, 0, 23
@@ -443,7 +423,7 @@ nahand:
naweap:
Defaults:
Offset: -12, -42, 30
Offset: -12, -42, 25
DepthSpriteOffset: 24, 0
UseTilesetCode: true
DepthSprite: isodepth.shp
@@ -506,23 +486,6 @@ naweap:
ShadowStart: 22
Offset: -12, -42, 43
DepthSpriteOffset: -12, 0
bib: ntweapbb
ZOffset: -1024
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
damaged-bib: ntweapbb
Start: 1
ZOffset: -1024
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
dead-bib: ntweapbb
Start: 2
ZOffset: -1024
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
emp-overlay: emp_fx01
Length: *
Offset: 0, 0, 31
@@ -783,7 +746,7 @@ gawall:
gagate_a:
Defaults:
Offset: -24, -24, 24
Offset: -24, -24, 25
DepthSpriteOffset: -24, 0
UseTilesetCode: true
DepthSprite: isodepth.shp
@@ -795,6 +758,7 @@ gagate_a:
ShadowStart: 30
Offset: -24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
damaged-idle:
Start: 10
@@ -805,6 +769,7 @@ gagate_a:
ShadowStart: 40
Offset: -24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
dead:
Start: 20
@@ -825,7 +790,7 @@ gagate_a:
gagate_b:
Defaults:
Offset: 24, -24, 24
Offset: 24, -24, 25
DepthSpriteOffset: 24, 0
UseTilesetCode: true
DepthSprite: isodepth.shp
@@ -836,6 +801,7 @@ gagate_b:
Start: 9
ShadowStart: 30
Offset: 24, -24, 1
ZOffset: -1024
ZRamp: 1
-DepthSprite:
damaged-idle:
@@ -847,6 +813,7 @@ gagate_b:
ShadowStart: 40
Offset: 24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
dead:
Start: 20
@@ -867,7 +834,7 @@ gagate_b:
nagate_a:
Defaults:
Offset: -24, -24, 24
Offset: -24, -24, 25
DepthSpriteOffset: -24, 0
UseTilesetCode: true
Tick: 80
@@ -884,6 +851,7 @@ nagate_a:
ShadowStart: 21
Offset: -24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
damaged-idle:
Start: 7
@@ -894,6 +862,7 @@ nagate_a:
ShadowStart: 28
Offset: -24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
dead:
Start: 14
@@ -914,7 +883,7 @@ nagate_a:
nagate_b:
Defaults:
Offset: 24, -24, 24
Offset: 24, -24, 25
DepthSpriteOffset: 24, 0
UseTilesetCode: true
DepthSprite: isodepth.shp
@@ -927,6 +896,7 @@ nagate_b:
ShadowStart: 21
Offset: 24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
damaged-idle:
Start: 7
@@ -937,6 +907,7 @@ nagate_b:
ShadowStart: 28
Offset: 24, -24, 1
ZRamp: 1
ZOffset: -1024
-DepthSprite:
dead:
Start: 14
@@ -1023,7 +994,7 @@ napost:
nafnce:
Defaults:
Offset: 0, -12, 13
Offset: 0, -12, 19
UseTilesetCode: true
DepthSprite: isodepth.shp
idle:
@@ -1043,20 +1014,24 @@ nafnce:
enabled-x:
Frames: 3,3,1,1,3,3,1,1,2,2,0,0,2,2,0,0
Length: 16
DepthSpriteOffset: -12, 0
enabled-x-bright:
Frames: 3,3,1,1,3,3,1,1,2,2,0,0,2,2,0,0
Length: 16
DepthSpriteOffset: -12, 0
IgnoreWorldTint: True
enabled-y:
Frames: 7,5,7,5,6,4,6,4,7,5,7,5,6,4,6,4
Length: 16
DepthSpriteOffset: 12, 0
enabled-y-bright:
Frames: 7,5,7,5,6,4,6,4,7,5,7,5,6,4,6,4
Length: 16
DepthSpriteOffset: 12, 0
IgnoreWorldTint: True
emp-overlay: emp_fx01
Length: *
Offset: 0, 0, 25
Offset: 0, 0, 13
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
@@ -1492,7 +1467,7 @@ gahpad:
nahpad:
Defaults:
Offset: 0, -24, 0
Offset: 0, -24, 1
DepthSpriteOffset: -24, 0
UseTilesetCode: true
idle:
@@ -1605,19 +1580,19 @@ proc.gdi:
bib: ntrefnbb
Length: 1
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
damaged-bib: ntrefnbb
Start: 1
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
dead-bib: ntrefnbb
Start: 2
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
emp-overlay: emp_fx01
@@ -1669,19 +1644,19 @@ proc.nod:
bib: ntrefnbb
Length: 1
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
damaged-bib: ntrefnbb
Start: 1
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
dead-bib: ntrefnbb
Start: 2
ZOffset: -1024
Offset: -12, -42, 5
Offset: -12, -42, 1
ZRamp: 1
-DepthSprite:
emp-overlay: emp_fx01
@@ -1739,19 +1714,19 @@ nawast:
ZOffset: -1024
ZRamp: 1
-DepthSprite:
Offset: 0, -36, 3
Offset: 0, -36, 1
damaged-bib: ntwastbb
Start: 1
ZOffset: -1024
ZRamp: 1
-DepthSprite:
Offset: 0, -36, 3
Offset: 0, -36, 1
dead-bib: ntwastbb
Start: 2
ZOffset: -1024
ZRamp: 1
-DepthSprite:
Offset: 0, -36, 3
Offset: 0, -36, 1
emp-overlay: emp_fx01
Length: *
Offset: 0, 0, 25

View File

@@ -192,5 +192,5 @@ veinhole:
idle:
ShadowStart: 1
UseTilesetExtension: true
Offset: 0, -36
Offset: 0, -36, 1
ZRamp: 1

View File

@@ -22,7 +22,7 @@ harv.gdi:
harvest: harvestr
Length: *
ZRamp: 1
Offset: 0, 0, 3
Offset: 0, 0, 1
icon: sidebar-gdi|harvicon
harv.nod:
@@ -30,7 +30,7 @@ harv.nod:
harvest: harvestr
Length: *
ZRamp: 1
Offset: 0, 0, 3
Offset: 0, 0, 1
icon: sidebar-nod|harvicon
hvr: