Skip to content

Commit ec8c9e4

Browse files
Merge branch 'feat-sdk-pixi-v5' into 'master'
[FEAT][SDK] migrate to PIXI v5 See merge request codingame/game-engine!291
2 parents f447f29 + bf98c38 commit ec8c9e4

File tree

15 files changed

+42027
-62
lines changed

15 files changed

+42027
-62
lines changed

engine/core/src/main/resources/view/core/Drawer.js

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class Drawer {
3939

4040
static get requirements () {
4141
return {
42-
PIXI: 'PIXI4'
42+
PIXI: 'PIXI5'
4343
}
4444
}
4545

@@ -206,7 +206,7 @@ export class Drawer {
206206
if (this.demo) {
207207
if (this.demo.logo) {
208208
try {
209-
const logo = PIXI.Sprite.fromFrame(this.demo.logo)
209+
const logo = PIXI.Sprite.from(this.demo.logo)
210210
logo.position.set(Drawer.WIDTH / 2, Drawer.HEIGHT / 2)
211211
logo.anchor.set(0.5)
212212
logo.baseScale = fitAspectRatio(logo.texture.width, logo.texture.height, 2 * Drawer.WIDTH / 3, Drawer.HEIGHT / 2, 0)
@@ -747,7 +747,7 @@ export class Drawer {
747747

748748
var drawer = this
749749

750-
var loader = new PIXI.loaders.Loader(window.location.origin)
750+
var loader = new PIXI.Loader(window.location.origin)
751751
this.playerInfo = agents.map(function (agent, index) {
752752
var agentData = {
753753
name: agent.name || 'Anonymous',
@@ -777,8 +777,8 @@ export class Drawer {
777777
completed = true
778778
}
779779

780-
loader.on('complete', onComplete)
781-
loader.on('error', function (e) {
780+
loader.onComplete.add(onComplete)
781+
loader.onError.add(function (e) {
782782
console.warn(e)
783783
// The loader won't complete now, let's just go ahead and see what happens
784784
if (!completed) {
@@ -860,7 +860,7 @@ export class Drawer {
860860
var resources = this.getResources()
861861
this.renderer = this.createRenderer(this.initWidth, this.initHeight, canvas)
862862
setRenderer(this.renderer)
863-
var loader = new PIXI.loaders.Loader(resources.baseUrl)
863+
var loader = new PIXI.Loader(resources.baseUrl)
864864
for (key in resources.images) {
865865
loader.add(key, resources.images[key], { crossOrigin: true })
866866
}
@@ -893,20 +893,15 @@ export class Drawer {
893893
requestAnimationFrame(self.animate.bind(self))
894894
self.initPreload(self.scope, self.container, self.loaded = 0, self.initWidth, self.initHeight)
895895
}
896-
loader.on('start', onStart)
897-
loader.on('progress', function (loader, resource) {
896+
loader.onStart.add(onStart)
897+
loader.onProgress.add(function (loader, resource) {
898898
if (loader.progress < 100) {
899899
self.preload(self.scope, self.container, self.loaded = loader.progress / 100, self.initWidth, self.initHeight, resource)
900900
}
901901
})
902902

903903
const onComplete = function () {
904904
var key
905-
for (key in resources.images) {
906-
if (resources.images.hasOwnProperty(key) && loader.resources[key].texture) {
907-
PIXI.Texture.addToCache(loader.resources[key].texture, key)
908-
}
909-
}
910905
for (key in resources.spines) {
911906
if (resources.spines.hasOwnProperty(key)) {
912907
PIXI.AnimCache[key] = PIXI.AnimCache[resources.baseUrl + resources.spines[key]]
@@ -917,8 +912,8 @@ export class Drawer {
917912
self.changed = true
918913
}
919914

920-
loader.on('complete', onComplete)
921-
loader.on('error', function (e) {
915+
loader.onComplete.add(onComplete)
916+
loader.onError.add(function (e) {
922917
console.warn(e)
923918
})
924919

@@ -937,7 +932,9 @@ export class Drawer {
937932
}
938933

939934
createRenderer (width, height, canvas) {
940-
return PIXI.autoDetectRenderer(width, height, {
935+
return PIXI.autoDetectRenderer({
936+
width,
937+
height,
941938
view: canvas,
942939
clearBeforeRender: true,
943940
preserveDrawingBuffer: false

engine/modules/endscreen/src/main/resources/view/endscreen-module/EndScreenModule.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export class EndScreenModule {
231231
let sprite = this.spriteName
232232
var titleRanking
233233
if (PIXI.utils.TextureCache[sprite]) {
234-
titleRanking = PIXI.Sprite.fromFrame(sprite)
234+
titleRanking = PIXI.Sprite.from(sprite)
235235
} else {
236236
ErrorLog.push(new MissingImageError(sprite))
237237
titleRanking = new PIXI.Sprite(PIXI.Texture.EMPTY)

engine/modules/entities/src/main/resources/view/entity-module/BitmapText.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ export class BitmapText extends Entity {
3131
updateDisplay (state, changed, globalData) {
3232
super.updateDisplay(state, changed, globalData)
3333
if (state.fontFamily !== null) {
34-
if (PIXI.extras.BitmapText.fonts[state.fontFamily]) {
34+
if (PIXI.BitmapFont.available[state.fontFamily]) {
3535
if (this.graphics.children.length === 0) {
36-
this.displayed = new PIXI.extras.BitmapText('', {
37-
font: { size: state.fontSize || 1, name: state.fontFamily }
36+
this.displayed = new PIXI.BitmapText('', {
37+
fontSize: state.fontSize || 1,
38+
fontName: state.fontFamily
3839
})
3940
this.graphics.addChild(this.displayed)
4041
} else {
41-
this.displayed.font = { size: state.fontSize || 1, name: state.fontFamily }
42+
this.displayed.fontName = state.fontFamily
43+
this.displayed.fontSize = state.fontSize || 1
4244
}
4345
this.displayed.anchor.set(state.anchorX, state.anchorY)
4446
this.displayed.blendMode = state.blendMode

engine/modules/entities/src/main/resources/view/entity-module/Command.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export class CreateCommands {
7979

8080
export class LoadCommand {
8181
constructor ([assetName, sourceImage, imageWidth, imageHeight, origRow, origCol, imageCount, imagesPerRow], globalData) {
82-
this.loader = new PIXI.loaders.Loader()
82+
this.loader = new PIXI.Loader()
8383

8484
if (imageWidth === '0') {
8585
imageWidth = PIXI.utils.TextureCache[sourceImage].width
@@ -122,7 +122,7 @@ export class LoadCommand {
122122
if (Object.keys(this.loader.resources).length > 0) {
123123
return new Promise((resolve) => {
124124
this.loader.load()
125-
this.loader.on('complete', resolve)
125+
this.loader.onComplete.add(resolve)
126126
})
127127
}
128128
}

engine/modules/entities/src/main/resources/view/entity-module/ContainerBasedEntity.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export class ContainerBasedEntity extends Entity {
1313
initDisplay () {
1414
super.initDisplay()
1515
this.graphics = new PIXI.Container()
16+
this.graphics.sortableChildren = true
1617
}
1718

1819
updateDisplay (state, changed, globalData) {

engine/modules/entities/src/main/resources/view/entity-module/Entity.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,6 @@ export class Entity {
140140
globalData.updatedBuffers.push(this)
141141
}
142142
}
143-
if (changed.zIndex) {
144-
globalData.mustResort = true
145-
}
146143
if (changed.mask) {
147144
globalData.maskUpdates[this.id] = state.mask
148145
}

engine/modules/entities/src/main/resources/view/entity-module/GraphicEntityModule.js

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export class GraphicEntityModule {
1515
this.globalData = {
1616
toWorldUnits: 1,
1717
mustResetTree: true,
18-
mustResort: true,
1918
maskUpdates: {},
2019
updatedBuffers: [],
2120
players: [],
@@ -118,21 +117,12 @@ export class GraphicEntityModule {
118117
this.globalData.toPixel = (WIDTH / canvasData.width) * canvasData.oversampling
119118
this.globalData.mustResetTree = true
120119
api.container = this.container = container
120+
container.sortableChildren = true
121121
this.entities.forEach((e) => {
122122
e.init()
123123
})
124124
}
125125

126-
sortChildren (container) {
127-
container.children.sort((a, b) => {
128-
if (a.zIndex === b.zIndex) {
129-
return a.id - b.id
130-
} else {
131-
return a.zIndex - b.zIndex
132-
}
133-
})
134-
}
135-
136126
stillLoading () {
137127
return this.loadingAssets > 0
138128
}
@@ -144,15 +134,10 @@ export class GraphicEntityModule {
144134

145135
this.entities.forEach(e => e.render(progress, currentData, this.globalData))
146136

147-
// Flags are set by Entity when a zIndex changes, or a group has different children
137+
// Flags are set by Entity when a group has different children
148138
if (this.globalData.mustResetTree) {
149139
this.reconstructTree()
150140
this.globalData.mustResetTree = false
151-
this.globalData.mustResort = true
152-
}
153-
if (this.globalData.mustResort) {
154-
this.resortTree()
155-
this.globalData.mustResort = false
156141
}
157142
for (const entityId in this.globalData.maskUpdates) {
158143
const entity = this.entities.get(+entityId)
@@ -169,17 +154,7 @@ export class GraphicEntityModule {
169154
this.globalData.maskUpdates = {}
170155
}
171156

172-
resortTree () {
173-
// Groups
174-
this.entities.forEach(e => {
175-
if (e instanceof ContainerBasedEntity) {
176-
this.sortChildren(e.childrenContainer)
177-
}
178-
})
179-
// Parent
180-
this.sortChildren(this.container)
181-
}
182-
157+
183158
reconstructTree () {
184159
this.container.removeChildren()
185160

engine/modules/entities/src/main/resources/view/entity-module/Sprite.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export class Sprite extends SpriteBasedEntity {
88
if (this.defaultState.image === null) {
99
this.graphics = new PIXI.Sprite(PIXI.Texture.EMPTY)
1010
} else {
11-
this.graphics = PIXI.Sprite.fromFrame(this.defaultState.image)
11+
this.graphics = PIXI.Sprite.from(this.defaultState.image)
1212
}
1313
}
1414
}

engine/modules/entities/src/main/resources/view/entity-module/SpriteAnimation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class SpriteAnimation extends TextureBasedEntity {
4646
const image = state.loop ? images[animationIndex % images.length] : (images[animationIndex] || images[images.length - 1])
4747

4848
try {
49-
this.graphics.texture = PIXI.Texture.fromFrame(image)
49+
this.graphics.texture = PIXI.Texture.from(image)
5050
} catch (error) {
5151
ErrorLog.push(new MissingImageError(image, error))
5252
}

engine/modules/entities/src/main/resources/view/entity-module/SpriteBasedEntity.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class SpriteBasedEntity extends TextureBasedEntity {
2121
if (changed.image) {
2222
try {
2323
if (state.image !== null) {
24-
this.graphics.texture = PIXI.Texture.fromFrame(state.image)
24+
this.graphics.texture = PIXI.Texture.from(state.image)
2525
} else {
2626
this.graphics.texture = PIXI.Texture.EMPTY
2727
}

runner/src/main/java/com/codingame/gameengine/runner/Renderer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ private static void generateAssetsFile(Path tmpdir, String assetsPath) {
215215

216216
Path origAssetsPath = tmpdir.resolve("assets");
217217
try {
218+
List<String> linkedImages = new ArrayList<>();
219+
218220
Files.find(origAssetsPath, 100, (p, bfa) -> bfa.isRegularFile()).forEach(
219221
f -> {
220222
try {
@@ -233,11 +235,13 @@ private static void generateAssetsFile(Path tmpdir, String assetsPath) {
233235
jsonToWriteTo = tmpdir.resolve("hashed_assets").resolve(newName).toString();
234236
Files.createDirectories(tmpdir.resolve("hashed_assets"));
235237
sprites.add(newName);
238+
linkedImages.add(hashedImageName);
236239
} else {
237240
String relativeImagePath = tmpdir.relativize(imagePath).toString();
238241
jsonObject.getAsJsonObject("meta").add("image", new JsonPrimitive(relativeImagePath));
239242
jsonToWriteTo = f.toString();
240243
sprites.add(tmpdir.relativize(f).toString().replace("\\", "/"));
244+
linkedImages.add(relativeImagePath);
241245
}
242246
try (FileWriter writer = new FileWriter(jsonToWriteTo)) {
243247
Gson gson = new GsonBuilder().create();
@@ -301,6 +305,14 @@ private static void generateAssetsFile(Path tmpdir, String assetsPath) {
301305
}
302306
}
303307
);
308+
309+
// Don't load images that are also getting loaded by spritesheets
310+
for (String imageName : linkedImages) {
311+
images.entrySet().removeIf(
312+
entry -> entry.getValue().getAsString().equals(imageName)
313+
);
314+
}
315+
304316
} catch (NoSuchFileException e) {
305317
System.out.println("Directory src/main/resources/view/assets not found.");
306318
}

runner/src/main/resources/view/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const createCGPlayer = (opts) => {
99
localStorageKey: 'ngStorage-gameParams',
1010
src: './player.html',
1111
libraries: {
12-
PIXI4: './lib/pixi4.js'
12+
PIXI5: './lib/pixi5.js'
1313
}
1414
})
1515
}

0 commit comments

Comments
 (0)