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 subSrc = GetSpriteSrc(modData, tileSet, sequence, animation, sub.Key, sd);
var subSprites = cache[subSrc, subGetUsedFrames].Select( var subSprites = cache[subSrc, subGetUsedFrames].Select(s =>
s => s != null ? new Sprite(s.Sheet, {
FlipRectangle(s.Bounds, subFlipX, subFlipY), ZRamp, if (s == null)
new float3(subFlipX ? -s.Offset.X : s.Offset.X, subFlipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + subOffset + offset, return null;
s.Channel, blendMode) : null).ToList();
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); var frames = subFrames != null ? subFrames.Skip(subStart).Take(subLength).ToArray() : Exts.MakeArray(subLength, i => subStart + i);
combined = combined.Concat(frames.Select(i => subSprites[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 // Apply offset to each sprite in the sequence
// Different sequences may apply different offsets to the same frame // Different sequences may apply different offsets to the same frame
var src = GetSpriteSrc(modData, tileSet, sequence, animation, info.Value, d); var src = GetSpriteSrc(modData, tileSet, sequence, animation, info.Value, d);
sprites = cache[src, getUsedFrames].Select( sprites = cache[src, getUsedFrames].Select(s =>
s => s != null ? new Sprite(s.Sheet, {
FlipRectangle(s.Bounds, flipX, flipY), ZRamp, if (s == null)
new float3(flipX ? -s.Offset.X : s.Offset.X, flipY ? -s.Offset.Y : s.Offset.Y, s.Offset.Z) + offset, return null;
s.Channel, blendMode) : null).ToArray();
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); alpha = LoadField(d, "Alpha", (float[])null);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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