From 2d597906ae8a391aec9d03613f6e6a1f8504a587 Mon Sep 17 00:00:00 2001 From: Ronja Date: Thu, 20 Feb 2020 21:12:55 +0100 Subject: [PATCH] figure out font rendering and selection --- Mockup.png | Bin 0 -> 6234 bytes Program/assets/Fonts/BabyBlocks.ttf | Bin 0 -> 12872 bytes Program/assets/Fonts/BabyBlocks.woff | Bin 0 -> 6824 bytes Program/assets/Fonts/BabyBlocks.woff2 | Bin 0 -> 4964 bytes Program/assets/Fonts/Pinch.ttf | Bin 0 -> 13508 bytes Program/assets/Fonts/pinch.woff | Bin 0 -> 7344 bytes Program/assets/Fonts/pinch.woff2 | Bin 0 -> 5592 bytes Program/index.html | 14 +- Program/src/Components/name.ts | 5 - .../Components/rendering/spriteRenderer.ts | 6 +- Program/src/Datatypes/observable.ts | 27 +++ Program/src/Datatypes/point.ts | 4 +- Program/src/Datatypes/vector.ts | 4 +- Program/src/Systems/ClickableSystem.ts | 13 + Program/src/Systems/DoorSystem.ts | 2 +- Program/src/Systems/InfoSystem.ts | 50 ++++ Program/src/Systems/VisibleHumanSystem.ts | 2 +- .../Systems/rendering/PixiCleanupSystem.ts | 3 +- Program/src/Systems/rendering/SpriteSystem.ts | 6 +- Program/src/constants.ts | 9 +- Program/src/globals.ts | 4 +- Program/src/index.ts | 43 +--- Program/src/resources.ts | 3 +- Program/src/setup.ts | 41 +++- Program/src/util.ts | 9 +- Program/style.css | 29 ++- Program/yarn.lock | 227 +----------------- 27 files changed, 207 insertions(+), 294 deletions(-) create mode 100644 Mockup.png create mode 100644 Program/assets/Fonts/BabyBlocks.ttf create mode 100644 Program/assets/Fonts/BabyBlocks.woff create mode 100644 Program/assets/Fonts/BabyBlocks.woff2 create mode 100644 Program/assets/Fonts/Pinch.ttf create mode 100644 Program/assets/Fonts/pinch.woff create mode 100644 Program/assets/Fonts/pinch.woff2 create mode 100644 Program/src/Datatypes/observable.ts create mode 100644 Program/src/Systems/InfoSystem.ts diff --git a/Mockup.png b/Mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6d49441fad5c4998a66f957edf771066070295 GIT binary patch literal 6234 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

E!5dHWS`o>uk^$VUgYoNXk$&@ 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 literal 0 HcmV?d00001 diff --git a/Program/assets/Fonts/Pinch.ttf b/Program/assets/Fonts/Pinch.ttf new file mode 100644 index 0000000000000000000000000000000000000000..79056843798fdaf799248e59af023643681d9d77 GIT binary patch literal 13508 zcmd^GU5K3Lbv`pYyV7bUOR`)`mL>aZvZArc?&!ys>@aRE$&s~Al_}s^L z*3Rr^cBIvsP;^mBDWM3p7YP^&C6tupB9IW}!i7*m@r5y@2_Ya;OzW0j_#zZHwIV6o z=Q;29e1AK$UYpX3cFg(S^ZuRloS*l+-^|KZGP4o8Y6Eugb5qsB+s^EH7Xv@S=u0!L z`r<=>9{oP}*UZY5+4+?Vm%sbZkDG0M#%%QUW}|-oOFLGtVeW@mbF_(pk=Cz%h5q~K zk2YJ~EC2Mjwrn=A&#d&di;YhEop=BBlV*p%i8cG?7iQ{aU-$#FLt8QbYO8)_(Jrk1 zomu63*dMj)t;Wq0Q}?3(Q?sF8EG{f{t-N{{`bRkrDuV_<_u&akN?WaB)V&%1aqf?z z2crF}tKgz&Pqc4!b@gA~e(vqlT>F3Q^Z(UuMiNvx{Jn2|X?yKI&31TTfA(+x^&%Oz zx7)YdBdw7Zy3C3Ydpt*4x7%jhzRxFig>m2Qj|-K*2%XAx$d73lnYZoxdE(sA%|M!G zpBg#G_2fCnc0H0TtyNppDVda2oRj?G_(uE0&b4YOPxg=(Cbr@^9(+V!=j~=+q&?av zOqyrQIm*(SAUE_m=8?K!qc-gE;W;mUqSBuv@!X9`#e9eDj`^}}vfqmN0ejHKW4>a0 zY$E0dQ5owoKZF#SkNHhjv#-SbX1m{h5c9*xuQy|Ui;daOVt%VVUGn+_B-`v0rIYda zJvLst81uXAkI^FtPu|0d=)*_HA?#QbLa-v)f(#RJD2mfR-H4_{>79Dh>ZACW_Jh zBwDU7Mbnq&=DX4IT(=oS`^GK3MWvFVbg8=3Tv)Cidi>yHM;<>~ouR8b^_8(j`sQS( z0c4jO(aD8Y3u~j}-EL=Y`V!GbQ_Xs(5gnhOyV!{J%*4xqm#fDYIABhH%a`gi7w6iu(JPI`=1ONNdU*jxv{qozm1w$g{`m6p#LT(H z<_pK4ddg1Pf-TyLb!^UNt!Z70FxIq&UB>7n&dCZ!4%}}f&c1>d6 ztX;y1szc%_$ZkX86sUvInLg6V+E zkP`uWx-p_Uyb;;6kTY$k-NRjY z{8LuNe-~m8ExEqnp>g6QGe1IBb%1aM$QOYsAy*(tFNqHUOn-C zg;3w~*EN3|C{M)@oqo}h0+t6t?g-)wFj;J1aLn?pDI?c-k3&`o-XZ;Wy4`eNH3 zUSoCM2k227F^IC5q(iN+YAxH!^|0f1TdT5duN~SQ_8~&}B(Z{<*Fek+@NJ9x=vub? z#B!2W7G=lF6QL)xw+^shBq7VT$RB(Xd?U8qcHy1v18@o#u~5q|-^%0FyvDVzXpM09 zYt!|9(0bwAKn@Tgvq%1rcQuA=>^V;>xF$tG33qP@t;YNHlkpPsI6fmDf5}XZkG42y>nYSaRty~$tISFsT=~2(D2~v|a#oGOWeiWkqZ62wzuGnI~UrT<^gnMIqYQLgKS@apt zgm|_(BZ^9SB4kMTrkcq-_lxJra8|m|GY*tbnc+z}?6Fp0HpMt-!}#{LGb=?XvwKry zsT|4-dP1#JuJ!PV$0O&Hb@DpM4SM?Pr8Q}lDC$%n0OK6OnacS}o~4}BSL8UuEGCaC z=66eiy+<_Zg)C#>p2o20W?8q=Myb z+g8j1>L5uXTSmlxuW(Jb+xe(-HIVpym-uXh_Z{~VJvE4Ds~qSzzSdgq%KAI>*RK1p ze$OIMhGY>+gZ!I+pUIqG)JJA0{MfTTGE$VQES8U%i>#~hzCxYOMyY6V)*nKL^?oil za^Em6lu4_zZBb{KUF&;Uq89ty2g9Sie8Bu-ZnM>n#0MM3ycSy?yKMOonA5tsZf%$M z!&waSRTZR7_Q*c9q246#ihb%NHL!}P0!X7O3;QH#(@j#IP$X3ixQd=&Jd*prPnF|Z zYGBL#JP-VEEJRD0OI*}+yFEM_ul8E=L3V|R2kG3$w@8jr6Sb(7x8%iJ2Tu8H~Ym99%g2EtV!jg_>d^&({kU6cgv}mCsb@zrWqRp@-y~hfY zRSQFLe_AV>IHeN z%v8(x4tIS$Y?q!ONm)tMltqtFt2`5I?9#iH-g4cm{<-azgaz zCnCqr?D-z)_q|0}iWn)4+J#%#!rxsuL*g!3&6SMn|CU}Mqkh+$Jp=rGs7KA@9nu5o}>Ek+T;3sRR zqRjDpbo2JgZnaqMwcTq{=G$_>9O|z}&9w$ualOc%Ip$yvFIN(Wa49Zn9B2h+)o%Q* zR30ey)J5vAOV)(8ay{RN53;uW57!Uof@+A6(i?t`hZ(Qi}oNxxDc>(qEa%CIieeJG#N z!XP#NBLP>(wZAI3v1C9VfMFrM4IP-2tz#- zYQFdKSJxO{Qk9BYRgV*Go;%5R!k)iM6=h_j%ZSj@6g6jWx0x?tOfCH2cWeBvwdQUu z`YXuM{U@o)Qf3!*vkmz_bQ2y4u}Q3_uc)89nSJE>VZVqtjmP>pwUccgBP9x_w90zV zA-CUg4)=R^(W%is_DLyXavIg?q9GM3EQl#Xjwu7nCQ@ zO14@?H2faJ_l+=`{yxJ#alXJR_q`&QmCQ_jWFIwXFI)LkW17{uRkjwtNral* z>u)ll4y%^2mz+6X=5#j$qX!`Yiko}g^<^oZorlOgNr z7x^}We~oX6mJyR5m2K>YNCwXeaTra1TP4mU|JSWm!b+(jih;Xzfd3|qnZi-EL2m5( zo~Mdd3q5yAuKW{nPdeCYHCuX*D@eiDNnK2QBn@o2UtUh4<#$4|ugABnbZ5|>^|EVr zOnPTf8$6!J=J!?Mw8@^V)Q}B9LO5-*5;OTbYy;9LCm<&_dX~D>>ir~>Uw!U+d7tPg zQ>62un5DWx+!R%vV$B28Adzk4Y)Y3}VUX8~x}_t{c-gBq=uT?>I=|ZyBlXID>Lf4S z8kbJB(%r-E{C(3S=cF&IgEmW7dea1Z(wm0;^!|1G_!pn#JcLRd-m2tHN~Ls?YEQ6& zD?;uCE7HE+Ly*(_8($9%lFn9k(3jK}&W$+T?99(}3`_Cu$1y)QZUOfP46HZ*@f^DG z`R$KGd$>^CatwqZxg_= zku|90ANAkle58GJpxIXo^dt1|0PweA-|vFnL!iC`!vB*{!R=P*f_{MlPy>M<{2J&r zAb$e%D(Efzh=hHcUdKN_$3My1JP&#Y*@^YTXt#V3^p_y;BQJrlf9rjqD{T%;teG~+}J1d}rpl_Pp8-e~9gtfcS?t+~Ap!dFSfZj9vjYZJE zo8AAK*>2$6{T&ecd(MMiHG5zWs0M=E2i`W@i#2=y6a@akr$NyD;QMC#o&kLY^oH4f z@cWyfcg!C81PE&$0{`$?5cWR&u2}>*5%}M%fUbh>n0@Re&=1W%J_;mtXbqs*hLgNvy2;>=Bo6#3dYY z2}ga+F&{tXyP>DF?+`OQ~rF`pQru#oIlUt>>jhT&QJRDd4K+%KhNR$q)UF% zB|qshYd%tQEwy-rT53iuHKUfAQA^FJrDoJpb1gNamYPvZ&8Vej)N;bDKH*lMaIc(pLYJ!&QG}Z3CAvp#ax`LoV{-ucfvKk59W N^Ha`GIsZH*{5QU@!W94j literal 0 HcmV?d00001 diff --git a/Program/assets/Fonts/pinch.woff b/Program/assets/Fonts/pinch.woff new file mode 100644 index 0000000000000000000000000000000000000000..b4aa3948ec9bf4ca05ec3650af1b1cad963430f8 GIT binary patch literal 7344 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 literal 0 HcmV?d00001 diff --git a/Program/assets/Fonts/pinch.woff2 b/Program/assets/Fonts/pinch.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b62964aa6bb3637d47c5683bab72edd888d72c11 GIT binary patch literal 5592 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 literal 0 HcmV?d00001 diff --git a/Program/index.html b/Program/index.html index 2f780cd..779d798 100644 --- a/Program/index.html +++ b/Program/index.html @@ -5,19 +5,7 @@ - + diff --git a/Program/src/Components/name.ts b/Program/src/Components/name.ts index 3b7f9fc..479e154 100644 --- a/Program/src/Components/name.ts +++ b/Program/src/Components/name.ts @@ -9,11 +9,6 @@ export class Name extends Component{ return `${this.first} ${this.last}` } - copy(values: any){ - if(values.first) - this.first = values?.first - } - reset(){ this.first = "firstname" this.last = "lastname" diff --git a/Program/src/Components/rendering/spriteRenderer.ts b/Program/src/Components/rendering/spriteRenderer.ts index 296c032..5bb648b 100644 --- a/Program/src/Components/rendering/spriteRenderer.ts +++ b/Program/src/Components/rendering/spriteRenderer.ts @@ -4,11 +4,13 @@ import { Vector } from "../../Datatypes/vector"; //todo: consider making this a systemstatecomponent so system order isn't as critical for removing sprites export class SpriteRenderer extends Component{ - texture: Texture - offset: Vector + texture = null + offset = new Vector(0) + scale = 1 //todo: remove when all textures have the correct size! reset() :void { this.texture = null this.offset = new Vector(0, 0) + this.scale = 1 } } \ No newline at end of file diff --git a/Program/src/Datatypes/observable.ts b/Program/src/Datatypes/observable.ts new file mode 100644 index 0000000..fc0b8c5 --- /dev/null +++ b/Program/src/Datatypes/observable.ts @@ -0,0 +1,27 @@ + + +export class Observable{ + value: T + + listeners: ((value:T)=>void)[] + + constructor(value?:T){ + this.value = value || null + this.listeners = [] + } + + set(value: T){ + this.value = value + for(let listener of this.listeners){ + listener(value) + } + } + + onChange(listener: (value:T)=>void):void{ + this.listeners.push(listener) + } + + removeAllListeners(listener: (value:T)=>void):void{ + this.listeners = [] + } +} \ No newline at end of file diff --git a/Program/src/Datatypes/point.ts b/Program/src/Datatypes/point.ts index 72673e5..4cb13f5 100644 --- a/Program/src/Datatypes/point.ts +++ b/Program/src/Datatypes/point.ts @@ -11,7 +11,9 @@ export class Point implements IPoint{ x: number y: number - constructor(x: number, y: number){ + constructor(x: number, y?: number){ + if(y === undefined) + y = x this.x = x this.y = y } diff --git a/Program/src/Datatypes/vector.ts b/Program/src/Datatypes/vector.ts index c10f595..3ea0a1e 100644 --- a/Program/src/Datatypes/vector.ts +++ b/Program/src/Datatypes/vector.ts @@ -5,7 +5,9 @@ export class Vector implements IPoint{ x: number y: number - constructor(x: number, y: number){ + constructor(x: number, y?: number){ + if(y===undefined) + y = x this.x = x this.y = y } diff --git a/Program/src/Systems/ClickableSystem.ts b/Program/src/Systems/ClickableSystem.ts index 1ed3b18..e2c6a6b 100644 --- a/Program/src/Systems/ClickableSystem.ts +++ b/Program/src/Systems/ClickableSystem.ts @@ -2,10 +2,23 @@ import { System, Entity, Not } from "ecsy" import { PixiRepresentation } from "../Components/rendering/pixiRepresentation"; import { Clickable } from "../Components/clickable"; import { InitializedClickable } from "../Components/initializedClickable"; +import globals from "../globals"; +import { interaction } from "pixi.js"; export class ClickableSystem extends System { priority = 80 + + init(){ + globals.app.stage.interactive = true + globals.app.stage.on("click", + (event:interaction.InteractionEvent) => { + if(event.target == event.currentTarget) + globals.selected.set(null) + }) + + } + // This method will get called on every frame by default execute(delta : number) { // Iterate through all the entities on the query diff --git a/Program/src/Systems/DoorSystem.ts b/Program/src/Systems/DoorSystem.ts index 41f3af7..08f6840 100644 --- a/Program/src/Systems/DoorSystem.ts +++ b/Program/src/Systems/DoorSystem.ts @@ -14,7 +14,7 @@ export class DoorSystem extends System { let doorOffset: IPoint = door.open ? door.openOffset : door.closedOffset let doorTex: Texture = door.open ? door.openTex : door.closedTex - entity.addComponent(SpriteRenderer, {texture: doorTex, offset: doorOffset}) + entity.addComponent(SpriteRenderer, {texture: doorTex, offset: doorOffset, scale:2}) }) this.queries.changedDoors.changed.forEach((entity: Entity) => { diff --git a/Program/src/Systems/InfoSystem.ts b/Program/src/Systems/InfoSystem.ts new file mode 100644 index 0000000..e57d24b --- /dev/null +++ b/Program/src/Systems/InfoSystem.ts @@ -0,0 +1,50 @@ +import { Human } from "../Components/human"; +import { Container, DisplayObject, Text } from "pixi.js"; +import { AABB } from "../Datatypes/aabb"; +import { System, Entity } from "ecsy"; +import globals from "../globals"; +import { Name } from "../Components/name"; + +// MovableSystem +export class InfoSystem extends System { + priority = 80 + + dirty: boolean + + root: Container + elements: {[id: string]:DisplayObject} = {} + + init(){ + globals.selected.onChange(_ => this.dirty = true) + + //todo: make this more flexible for other resolutions + let bounds = new AABB(0, 162, 162, 126) + + this.root = globals.app.stage.addChild(new Container()) + this.root.position = bounds.min() + this.root.width = bounds.size.x + this.root.height = bounds.size.y + + let name = new Text('Name: ',{fontFamily : 'babyblocks', fontSize: 8, fill : 0xffffff}); + name.x = 2 + this.root.addChild(name) + this.elements.name = name + + globals.selected.onChange(selected => this.select(selected)) + } + + execute(delta : number) { + + } + + select(entity: Entity){ + (this.elements.name as Text).text = `Name: ${entity?.getComponent(Name)?.fullName() || "-"}` + } + + static queries = { + UIComponent: { + components: [ Human ] + }, + } + queries: any; +} \ No newline at end of file diff --git a/Program/src/Systems/VisibleHumanSystem.ts b/Program/src/Systems/VisibleHumanSystem.ts index f674d70..315e548 100644 --- a/Program/src/Systems/VisibleHumanSystem.ts +++ b/Program/src/Systems/VisibleHumanSystem.ts @@ -15,7 +15,7 @@ export class VisibleHumanSystem extends System { // add sprite at start this.queries.newHumans.results.forEach((entity: Entity) => { let texture = entity.getComponent(Appearance).idleTexture - entity.addComponent(SpriteRenderer, {texture: texture, offset: new Vector(-texture.width/2, -texture.height)}) + entity.addComponent(SpriteRenderer, {texture: texture, offset: new Vector(-texture.width/2, -texture.height), scale:2}) }) //update sprite texture this.queries.visibleHumans.changed.forEach((entity: Entity) => { diff --git a/Program/src/Systems/rendering/PixiCleanupSystem.ts b/Program/src/Systems/rendering/PixiCleanupSystem.ts index 184c321..6c5d81d 100644 --- a/Program/src/Systems/rendering/PixiCleanupSystem.ts +++ b/Program/src/Systems/rendering/PixiCleanupSystem.ts @@ -3,6 +3,7 @@ import { Not, Entity, System } from "ecsy"; import { DebugRect } from "../../Components/rendering/debugRect"; import { SpriteRenderer } from "../../Components/rendering/spriteRenderer"; import globals from "../../globals"; +import { DebugLine } from "../../Components/rendering/debugLine"; export class PixiCleanupSystem extends System { @@ -21,7 +22,7 @@ export class PixiCleanupSystem extends System { static queries = { oldRepresentations: { // add all draw components here as not thingy otherwise your representation will be killed - components: [ PixiRepresentation, Not(DebugRect), Not(SpriteRenderer) ] + components: [ PixiRepresentation, Not(DebugRect), Not(SpriteRenderer), Not(DebugLine)] }, } queries: any; diff --git a/Program/src/Systems/rendering/SpriteSystem.ts b/Program/src/Systems/rendering/SpriteSystem.ts index e2a23c7..afd5842 100644 --- a/Program/src/Systems/rendering/SpriteSystem.ts +++ b/Program/src/Systems/rendering/SpriteSystem.ts @@ -5,6 +5,7 @@ import { Sprite, DisplayObject } from "pixi.js"; import { PixiRepresentation } from "../../Components/rendering/pixiRepresentation"; import { addOrSetComponent } from "../../util"; import globals from "../../globals"; +import { Point } from "../../Datatypes/point"; // MovableSystem export class SpriteSystem extends System { @@ -20,7 +21,8 @@ export class SpriteSystem extends System { let renderer = entity.getComponent(SpriteRenderer) let pos = entity.getComponent(Position) let sprite = new Sprite(renderer.texture) - sprite.position = pos.value.add(renderer.offset) + sprite.scale = new Point(renderer.scale) + sprite.position = pos.value.add(renderer.offset.scale(renderer.scale)) globals.app.stage.addChild(sprite) addOrSetComponent(entity, PixiRepresentation, {value: sprite}) }) @@ -32,7 +34,7 @@ export class SpriteSystem extends System { let pos = entity.getComponent(Position) let object = entity.getComponent(PixiRepresentation).value as Sprite object.texture = renderer.texture - object.position = pos.value.add(renderer.offset) + object.position = pos.value.add(renderer.offset.scale(renderer.scale)) }) } diff --git a/Program/src/constants.ts b/Program/src/constants.ts index e1557f5..64091cd 100644 --- a/Program/src/constants.ts +++ b/Program/src/constants.ts @@ -1,9 +1,9 @@ import { AABB } from "./Datatypes/aabb" -export const canvasWidth = 81 -export const canvasHeight = 144 +export const canvasWidth = 162 +export const canvasHeight = 288 -export const roomBounds = new AABB(10, 17, 62, 56) +export const roomBounds = new AABB(19, 34, 125, 113) export const FirstNames = [ "Jules", @@ -11,8 +11,7 @@ export const FirstNames = [ "Sarah", "Simon", "Ronja", - "Marko", - "Wachter" + "Marko" ] export const LastNames = [ diff --git a/Program/src/globals.ts b/Program/src/globals.ts index 46325b3..ef5dde7 100644 --- a/Program/src/globals.ts +++ b/Program/src/globals.ts @@ -1,7 +1,9 @@ -import { World } from "ecsy"; +import { World, Entity } from "ecsy"; import { Application } from "pixi.js"; +import { Observable } from "./Datatypes/observable"; export default { world: null, app: null, + selected: new Observable(), } \ No newline at end of file diff --git a/Program/src/index.ts b/Program/src/index.ts index e85f8ed..a374fdd 100644 --- a/Program/src/index.ts +++ b/Program/src/index.ts @@ -1,29 +1,15 @@ -import { Application, Ticker, settings, SCALE_MODES } from "pixi.js" +import { Application, settings, SCALE_MODES, Ticker } from "pixi.js"; +import globals from "./globals"; +import { canvasWidth, canvasHeight } from "./constants"; +import { loadResources } from "./resources"; +import { setup } from "./setup"; -import { setup } from "./setup" -import { loadResources } from "./Resources" - -import { DoorSystem } from "./Systems/DoorSystem" -import { SpriteSystem } from "./Systems/rendering/SpriteSystem" -import { RenderSystem } from "./Systems/rendering/RenderSystem" -import { TestSystem } from "./Systems/TestSystem" -import { AdventureReturnSystem } from "./Systems/AdventureReturnSystem" -import { VisibleHumanSystem } from "./Systems/VisibleHumanSystem" -import { DebugRenderSystem } from "./Systems/rendering/DebugRenderSystem" -import { PixiCleanupSystem } from "./Systems/rendering/PixiCleanupSystem" -import { ZOrderSystem } from "./Systems/rendering/ZOrderSystem" -import { PathWalkerSystem } from "./Systems/PathWalkerSystem" -import { RandomWalkSystem } from "./Systems/RandomWalkSystem" -import { World } from "ecsy" -import globals from "./globals" -import { canvasWidth, canvasHeight } from "./constants" -import { ClickableSystem } from "./Systems/ClickableSystem" // Initialize pixi globals.app = new Application({ width: canvasWidth, height: canvasHeight, - backgroundColor: 0x000000, + backgroundColor: 0x10101010, resolution: 1, antialias: false, }) @@ -42,23 +28,6 @@ function recalculateSize(){ globals.app.view.style.height = canvasHeight * multiplier + "px" } -// Create world and register the systems on it -//we could also register components here but they should get automatically registered once used for the first time -globals.world = new World() -globals.world - .registerSystem(TestSystem) //prio -100 - .registerSystem(AdventureReturnSystem) //prio -100 - .registerSystem(DoorSystem) //prio 0 - .registerSystem(RandomWalkSystem) //prio 0 - .registerSystem(PathWalkerSystem) //prio 50 - .registerSystem(VisibleHumanSystem) //prio 50 - .registerSystem(SpriteSystem) //prio 70 - .registerSystem(ClickableSystem) //prio 80 - .registerSystem(DebugRenderSystem) //prio 90 - .registerSystem(ZOrderSystem) //prio 98 - .registerSystem(PixiCleanupSystem) //prio 99 - .registerSystem(RenderSystem) //prio 100 - loadResources(init) diff --git a/Program/src/resources.ts b/Program/src/resources.ts index 366ebe3..a3fde14 100644 --- a/Program/src/resources.ts +++ b/Program/src/resources.ts @@ -1,10 +1,11 @@ -import { Loader } from "pixi.js" +import { Loader, } from "pixi.js" export function loadResources(init: Function){ Loader.shared.add("Door", "assets/Door.json") .add("Background", "assets/Background.png") .add("Human", "assets/Human.png") + .add("pixelfont_fnt","assets/Fonts/Visitor2.fnt") .load(setup) function setup(loader: Loader){ diff --git a/Program/src/setup.ts b/Program/src/setup.ts index d9a2f74..395abd1 100644 --- a/Program/src/setup.ts +++ b/Program/src/setup.ts @@ -6,23 +6,58 @@ import globals from "./globals"; import { createRandomHuman } from "./util"; import { Position } from "./Components/position"; import { Point } from "./Datatypes/point"; +import { World } from "ecsy"; +import { TestSystem } from "./Systems/TestSystem"; +import { AdventureReturnSystem } from "./Systems/AdventureReturnSystem"; +import { DoorSystem } from "./Systems/DoorSystem"; +import { RandomWalkSystem } from "./Systems/RandomWalkSystem"; +import { PathWalkerSystem } from "./Systems/PathWalkerSystem"; +import { VisibleHumanSystem } from "./Systems/VisibleHumanSystem"; +import { SpriteSystem } from "./Systems/rendering/SpriteSystem"; +import { ClickableSystem } from "./Systems/ClickableSystem"; +import { InfoSystem } from "./Systems/InfoSystem"; +import { DebugRenderSystem } from "./Systems/rendering/DebugRenderSystem"; +import { ZOrderSystem } from "./Systems/rendering/ZOrderSystem"; +import { PixiCleanupSystem } from "./Systems/rendering/PixiCleanupSystem"; +import { RenderSystem } from "./Systems/rendering/RenderSystem"; +import { Vector } from "./Datatypes/vector"; export function setup(){ + // Create world and register the systems on it + //we could also register components here but they should get automatically registered once used for the first time + globals.world = new World() + globals.world + .registerSystem(TestSystem) //prio -100 + .registerSystem(AdventureReturnSystem) //prio -100 + .registerSystem(DoorSystem) //prio 0 + .registerSystem(RandomWalkSystem) //prio 0 + .registerSystem(PathWalkerSystem) //prio 50 + .registerSystem(VisibleHumanSystem) //prio 50 + .registerSystem(SpriteSystem) //prio 70 + .registerSystem(ClickableSystem) //prio 80 + .registerSystem(InfoSystem) //prio 80 + .registerSystem(DebugRenderSystem) //prio 90 + .registerSystem(ZOrderSystem) //prio 98 + .registerSystem(PixiCleanupSystem) //prio 99 + .registerSystem(RenderSystem) //prio 100 + + let resources = Loader.shared.resources; //base sprites without entity representation const bgTex = new Sprite(resources["Background"].texture) + bgTex.scale = new Point(2) //TODO make texture of correct size globals.app.stage.addChild(bgTex) //start entities //door globals.world.createEntity() - .addComponent(Position, {value: new Point(38, 2)}) + .addComponent(Position, {value: new Point(76, 4)}) .addComponent(Door, {open: true, - openOffset: {x:0, y:0}, openTex: resources["Door"].spritesheet.textures[0], - closedOffset: {x:0, y:0}, closedTex: resources["Door"].spritesheet.textures[1]}) + openOffset: new Vector(0), openTex: resources["Door"].spritesheet.textures[0], + closedOffset: new Vector(0), closedTex: resources["Door"].spritesheet.textures[1]}) //debug room bounds globals.world.createEntity() diff --git a/Program/src/util.ts b/Program/src/util.ts index 0583cbc..68b9f68 100644 --- a/Program/src/util.ts +++ b/Program/src/util.ts @@ -7,8 +7,9 @@ import { InCabin } from "./Components/inCabin" import { OrderZ } from "./Components/rendering/orderZ" import { WalkRandomly } from "./Components/walkRandomly" import { Position } from "./Components/position" -import { roomBounds } from "./constants" +import { roomBounds, FirstNames, LastNames } from "./constants" import { Clickable } from "./Components/clickable" +import globals from "./globals" export function addOrSetComponent(entity: Entity, Component: ComponentConstructor, values: any) { @@ -29,7 +30,7 @@ export function addOrSetComponent(entity: Entity, Component: ComponentConstructo } export function randomArrayValue(array: any[]):any{ - let randomIndex = Math.random() * array.length + let randomIndex = Math.floor(Math.random() * array.length) return array[randomIndex] } @@ -38,12 +39,12 @@ export function createRandomHuman(world: World){ let entity = world.createEntity() entity .addComponent(Human) - .addComponent(Name, {first: "mary", last:"sue"}) + .addComponent(Name, {first: randomArrayValue(FirstNames), last:randomArrayValue(LastNames)}) .addComponent(Appearance, {idleTexture: resources["Human"].texture}) //Todo: generate appearance from body traits instead? .addComponent(InCabin) .addComponent(Position, {value: roomBounds.randomPoint()}) .addComponent(OrderZ) .addComponent(WalkRandomly) //todo: change this into selecing the human instead of killing it... - .addComponent(Clickable, { actions: { "click": (event: interaction.InteractionEvent) => {entity.remove();} }}) + .addComponent(Clickable, { actions: { "click": (event: interaction.InteractionEvent) => {globals.selected.set(entity)} }}) } \ No newline at end of file diff --git a/Program/style.css b/Program/style.css index 5f6da28..eb61726 100644 --- a/Program/style.css +++ b/Program/style.css @@ -1,6 +1,7 @@ html, body { - margin: 0; + margin: 10; padding: 0; + background-color: rgb(198, 221, 235); } canvas { @@ -8,4 +9,30 @@ canvas { image-rendering: -webkit-crisp-edges; image-rendering: pixelated; image-rendering: crisp-edges; +} + +canvas, img { /* makes a change, noticeable [28/05/16] */ + image-rendering: optimizeSpeed; + image-rendering: -moz-crisp-edges; + image-rendering: -webkit-optimize-contrast; + image-rendering: optimize-contrast; + image-rendering: pixelated; + -ms-interpolation-mode: nearest-neighbor; +} + + +@font-face { + font-family: 'pinch'; + src: url('assets/Fonts/pinch.woff2') format('woff2'), + url('assets/Fonts/pinch.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'babyblocks'; + src: url('assets/Fonts/BabyBlocks.woff2') format('woff2'), + url('assets/Fonts/BabyBlocks.woff') format('woff'), + url('assets/Fonts/BabyBlocks.ttf') format('ttf'); + font-weight: normal; + font-style: normal; } \ No newline at end of file diff --git a/Program/yarn.lock b/Program/yarn.lock index e714f23..b491156 100644 --- a/Program/yarn.lock +++ b/Program/yarn.lock @@ -494,11 +494,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -572,19 +567,11 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1130,11 +1117,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -1270,7 +1252,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -1306,11 +1288,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -1361,11 +1338,6 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -1389,11 +1361,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -1905,13 +1872,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -1940,20 +1900,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2063,11 +2009,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2262,7 +2203,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2279,13 +2220,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2327,7 +2261,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -2877,21 +2811,6 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -2916,7 +2835,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -2985,15 +2904,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -needle@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.2.tgz#3342dea100b7160960a450dc8c22160ac712a528" - integrity sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -3050,30 +2960,6 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -3086,27 +2972,6 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3114,16 +2979,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -3136,7 +2991,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -3240,11 +3095,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -3254,19 +3104,6 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -3638,17 +3475,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -3789,7 +3616,7 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -3833,11 +3660,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -3859,7 +3681,7 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -3916,7 +3738,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -4151,7 +3973,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4224,11 +4046,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - supports-color@6.1.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" @@ -4248,19 +4065,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -4690,13 +4494,6 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -4743,7 +4540,7 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==