Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
scilla-core
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
劳工
scilla-core
Commits
b0e7836a
Commit
b0e7836a
authored
Jul 12, 2019
by
rockyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.1版本提交一次,暂停开发
parent
f48443f1
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
343 additions
and
74 deletions
+343
-74
Component.ts
src/core/Component.ts
+1
-1
ScillaEngine.ts
src/core/ScillaEngine.ts
+1
-1
Sheet.ts
src/core/Sheet.ts
+45
-15
Texture.ts
src/core/Texture.ts
+5
-3
Transform.ts
src/core/Transform.ts
+5
-0
RenderContext.ts
src/core/context/RenderContext.ts
+1
-1
index.ts
src/core/index.ts
+1
-1
interpreter.ts
src/core/interpreter.ts
+12
-5
Circle.ts
src/core/nodes/Circle.ts
+7
-7
GraphicNode.ts
src/core/nodes/GraphicNode.ts
+7
-1
Image.ts
src/core/nodes/Image.ts
+194
-0
Node.ts
src/core/nodes/Node.ts
+59
-34
index.ts
src/core/nodes/index.ts
+2
-0
utils.ts
src/core/utils.ts
+3
-5
No files found.
src/core/Component.ts
View file @
b0e7836a
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
*/
*/
import
HashObject
from
"./HashObject"
;
import
HashObject
from
"./HashObject"
;
import
{
Node
,}
from
"./Node"
;
import
{
Node
,}
from
"./
nodes/
Node"
;
import
{
EngineConfig
}
from
"../engine-config"
;
import
{
EngineConfig
}
from
"../engine-config"
;
const
interactiveMap
=
[
const
interactiveMap
=
[
...
...
src/core/ScillaEngine.ts
View file @
b0e7836a
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
* 引擎
* 引擎
*/
*/
import
{
Node
,
RootNode
}
from
"./Node"
;
import
{
Node
,
RootNode
}
from
"./
nodes/
Node"
;
import
{
injectProp
}
from
"../tools/utils"
;
import
{
injectProp
}
from
"../tools/utils"
;
import
InteractContext
from
"./context/InteractContext"
;
import
InteractContext
from
"./context/InteractContext"
;
import
RenderContext
,
{
ScaleMode
}
from
"./context/RenderContext"
;
import
RenderContext
,
{
ScaleMode
}
from
"./context/RenderContext"
;
...
...
src/core/Sheet.ts
View file @
b0e7836a
...
@@ -9,11 +9,11 @@ import {Frame} from "../ReType";
...
@@ -9,11 +9,11 @@ import {Frame} from "../ReType";
/**
/**
* 图集
* 图集
*/
*/
export
class
Sheet
extends
HashObject
{
export
class
Sheet
extends
HashObject
{
/**
/**
* 图集原图
* 图集原图
或原材质
*/
*/
img
:
any
;
source
:
any
;
/**
/**
* 图集分割配置
* 图集分割配置
*/
*/
...
@@ -21,13 +21,22 @@ export class Sheet extends HashObject{
...
@@ -21,13 +21,22 @@ export class Sheet extends HashObject{
private
_textureCache
:
any
=
{};
private
_textureCache
:
any
=
{};
constructor
(
img
?,
frames
?:
Frame
)
{
constructor
(
source
?:
HTMLImageElement
|
Texture
,
frames
?
)
{
super
();
super
();
if
(
img
){
this
.
init
(
source
,
frames
);
this
.
img
=
img
;
}
/**
* 初始化
* @param source
* @param frames
*/
init
(
source
?:
HTMLImageElement
|
Texture
,
frames
?)
{
if
(
source
)
{
this
.
source
=
source
;
}
}
if
(
frames
)
{
if
(
frames
)
{
this
.
frames
=
frames
;
this
.
frames
=
frames
;
}
}
}
}
...
@@ -47,7 +56,7 @@ export class Sheet extends HashObject{
...
@@ -47,7 +56,7 @@ export class Sheet extends HashObject{
* @param force
* @param force
*/
*/
generateTexture
(
name
:
string
,
force
=
false
):
Texture
{
generateTexture
(
name
:
string
,
force
=
false
):
Texture
{
const
{
img
,
frames
,
_textureCache
}
=
this
;
const
{
source
,
frames
,
_textureCache
}
=
this
;
if
(
!
force
&&
_textureCache
[
name
])
{
if
(
!
force
&&
_textureCache
[
name
])
{
return
_textureCache
[
name
];
return
_textureCache
[
name
];
...
@@ -55,7 +64,13 @@ export class Sheet extends HashObject{
...
@@ -55,7 +64,13 @@ export class Sheet extends HashObject{
const
frame
=
frames
[
name
];
const
frame
=
frames
[
name
];
if
(
frame
)
{
if
(
frame
)
{
return
_textureCache
[
name
]
=
createTexture
(
img
,
frame
);
let
img
=
source
,
realFrame
=
frame
;
if
(
source
instanceof
Texture
){
img
=
source
.
img
;
realFrame
.
x
+=
source
.
x
;
realFrame
.
y
+=
source
.
y
;
}
return
_textureCache
[
name
]
=
createTexture
(
img
,
realFrame
);
}
}
}
}
...
@@ -64,7 +79,7 @@ export class Sheet extends HashObject{
...
@@ -64,7 +79,7 @@ export class Sheet extends HashObject{
* @param name
* @param name
* @param texture
* @param texture
*/
*/
inputTexture
(
name
:
string
,
texture
:
Texture
){
inputTexture
(
name
:
string
,
texture
:
Texture
)
{
this
.
_textureCache
[
name
]
=
texture
;
this
.
_textureCache
[
name
]
=
texture
;
}
}
...
@@ -97,14 +112,29 @@ export class Sheet extends HashObject{
...
@@ -97,14 +112,29 @@ export class Sheet extends HashObject{
}
}
/**
/**
* 销毁自身
* 销毁材质
* @param name
*/
*/
destroy
()
{
destroyTexture
(
name
){
this
.
img
=
null
;
this
.
_textureCache
[
name
].
destroy
();
delete
this
.
_textureCache
[
name
];
}
/**
* 销毁所有材质
*/
cleanAllTexture
(){
for
(
let
key
in
this
.
_textureCache
)
{
for
(
let
key
in
this
.
_textureCache
)
{
this
.
_textureCache
[
key
].
destroy
();
this
.
destroyTexture
(
key
);
delete
this
.
_textureCache
[
key
];
}
}
}
}
/**
* 销毁自身
*/
destroy
()
{
this
.
source
=
null
;
this
.
cleanAllTexture
();
}
}
}
src/core/Texture.ts
View file @
b0e7836a
...
@@ -48,10 +48,10 @@ export default class Texture extends HashObject {
...
@@ -48,10 +48,10 @@ export default class Texture extends HashObject {
setFrame
(
frame
:
Frame
)
{
setFrame
(
frame
:
Frame
)
{
utils
.
injectProp
(
this
,
frame
);
utils
.
injectProp
(
this
,
frame
);
if
(
!
frame
.
hasOwnProperty
(
'sourceW'
))
{
if
(
!
frame
.
hasOwnProperty
(
'sourceW'
))
{
frame
.
sourceW
=
frame
.
width
;
this
.
sourceW
=
frame
.
width
;
}
}
if
(
!
frame
.
hasOwnProperty
(
'sourceH'
))
{
if
(
!
frame
.
hasOwnProperty
(
'sourceH'
))
{
frame
.
sourceH
=
frame
.
height
;
this
.
sourceH
=
frame
.
height
;
}
}
}
}
...
@@ -101,9 +101,11 @@ export default class Texture extends HashObject {
...
@@ -101,9 +101,11 @@ export default class Texture extends HashObject {
* @param dw
* @param dw
* @param dh
* @param dh
*/
*/
drawToCanvas
(
context
,
dx
=
0
,
dy
=
0
,
sx
?,
sy
?,
dw
?,
dh
?)
{
drawToCanvas
(
context
:
CanvasRenderingContext2D
,
dx
=
0
,
dy
=
0
,
sx
?,
sy
?,
dw
?,
dh
?)
{
const
{
x
,
y
,
width
,
height
,
offX
,
offY
}
=
this
;
const
{
x
,
y
,
width
,
height
,
offX
,
offY
}
=
this
;
console
.
log
(
x
,
y
,
width
,
height
);
console
.
log
(
sx
||
x
,
sy
||
y
,
width
,
height
,
dx
+
offX
,
dy
+
offY
,
dw
||
width
,
dh
||
height
);
context
.
drawImage
(
this
.
img
,
sx
||
x
,
sy
||
y
,
width
,
height
,
dx
+
offX
,
dy
+
offY
,
dw
||
width
,
dh
||
height
);
context
.
drawImage
(
this
.
img
,
sx
||
x
,
sy
||
y
,
width
,
height
,
dx
+
offX
,
dy
+
offY
,
dw
||
width
,
dh
||
height
);
}
}
...
...
src/core/Transform.ts
0 → 100644
View file @
b0e7836a
/**
* Created by rockyl on 2019-07-10.
*/
src/core/context/RenderContext.ts
View file @
b0e7836a
...
@@ -346,7 +346,7 @@ export default class RenderContext {
...
@@ -346,7 +346,7 @@ export default class RenderContext {
let
{
shortcutCanvas
,
stageWidth
,
stageHeight
}
=
this
;
let
{
shortcutCanvas
,
stageWidth
,
stageHeight
}
=
this
;
if
(
!
shortcutCanvas
)
{
if
(
!
shortcutCanvas
)
{
this
.
shortcutCanvas
=
createCanvas
();
shortcutCanvas
=
this
.
shortcutCanvas
=
createCanvas
();
}
}
const
sx
=
bounds
?
bounds
.
x
||
0
:
0
;
const
sx
=
bounds
?
bounds
.
x
||
0
:
0
;
const
sy
=
bounds
?
bounds
.
y
||
0
:
0
;
const
sy
=
bounds
?
bounds
.
y
||
0
:
0
;
...
...
src/core/index.ts
View file @
b0e7836a
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
*/
*/
export
{
Component
}
from
"./Component"
;
export
{
Component
}
from
"./Component"
;
export
{
Node
,
RootNode
}
from
'./Node'
export
{
Node
,
RootNode
}
from
'./
nodes/
Node'
export
{
ScillaEvent
}
from
'./ScillaEvent'
export
{
ScillaEvent
}
from
'./ScillaEvent'
export
{
createCanvas
,
ScaleMode
}
from
'./context/RenderContext'
;
export
{
createCanvas
,
ScaleMode
}
from
'./context/RenderContext'
;
export
{
default
as
engine
,
ScillaEngine
}
from
'./ScillaEngine'
export
{
default
as
engine
,
ScillaEngine
}
from
'./ScillaEngine'
...
...
src/core/interpreter.ts
View file @
b0e7836a
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
* 配置文件解释器
* 配置文件解释器
*/
*/
import
{
Node
}
from
".
./core
/Node"
;
import
{
Node
}
from
".
/nodes
/Node"
;
import
{
ScillaEvent
}
from
"../core/ScillaEvent"
;
import
{
ScillaEvent
}
from
"../core/ScillaEvent"
;
import
{
EngineConfig
}
from
"../engine-config"
;
import
{
EngineConfig
}
from
"../engine-config"
;
import
engine
from
"./ScillaEngine"
;
import
engine
from
"./ScillaEngine"
;
...
@@ -75,11 +75,16 @@ function instantiateConfig(config, root?: Node, pid?: number): Node {
...
@@ -75,11 +75,16 @@ function instantiateConfig(config, root?: Node, pid?: number): Node {
function
setupNode
(
config
,
root
?:
Node
,
pid
?:
number
):
Node
{
function
setupNode
(
config
,
root
?:
Node
,
pid
?:
number
):
Node
{
let
node
:
Node
=
null
;
let
node
:
Node
=
null
;
if
(
config
)
{
if
(
config
)
{
let
{
name
,
uuid
,
children
}
=
config
;
let
{
name
,
uuid
,
children
,
base
}
=
config
;
if
(
pid
!==
undefined
&&
uuid
!==
undefined
)
{
if
(
pid
!==
undefined
&&
uuid
!==
undefined
)
{
uuid
=
pid
+
'_'
+
uuid
;
uuid
=
pid
+
'_'
+
uuid
;
}
}
node
=
root
||
new
Node
(
name
,
uuid
);
if
(
root
)
{
node
=
root
;
}
else
{
let
temp
=
engine
.
getDefByName
(
base
);
node
=
new
temp
(
name
,
uuid
);
}
nodeMap
[
uuid
]
=
node
;
nodeMap
[
uuid
]
=
node
;
...
@@ -165,6 +170,8 @@ function instantiateComponents(node: Node, config: any) {
...
@@ -165,6 +170,8 @@ function instantiateComponents(node: Node, config: any) {
* @param pid
* @param pid
*/
*/
function
injectComponents
(
node
:
Node
,
config
:
any
,
pid
?:
number
)
{
function
injectComponents
(
node
:
Node
,
config
:
any
,
pid
?:
number
)
{
injectComponentProperties
(
node
,
config
,
pid
);
if
(
config
.
components
)
{
if
(
config
.
components
)
{
const
components
=
node
.
components
;
const
components
=
node
.
components
;
for
(
let
i
=
0
,
li
=
config
.
components
.
length
;
i
<
li
;
i
++
)
{
for
(
let
i
=
0
,
li
=
config
.
components
.
length
;
i
<
li
;
i
++
)
{
...
@@ -337,10 +344,10 @@ function transPrefabUUID(uuid, pid: number) {
...
@@ -337,10 +344,10 @@ function transPrefabUUID(uuid, pid: number) {
return
pid
?
pid
+
'_'
+
uuid
:
uuid
;
return
pid
?
pid
+
'_'
+
uuid
:
uuid
;
}
}
function
wrapperScript
(
script
){
function
wrapperScript
(
script
)
{
try
{
try
{
return
new
Function
(
'component'
,
'dataCenter'
,
script
);
return
new
Function
(
'component'
,
'dataCenter'
,
script
);
}
catch
(
e
)
{
}
catch
(
e
)
{
console
.
warn
(
'script is correct :'
,
script
);
console
.
warn
(
'script is correct :'
,
script
);
}
}
}
}
src/core/nodes/Circle.ts
View file @
b0e7836a
...
@@ -29,25 +29,25 @@ export class Circle extends GraphicNode {
...
@@ -29,25 +29,25 @@ export class Circle extends GraphicNode {
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
protected
draw
()
{
protected
draw
(
context
)
{
const
{
currentCanvasContext
,
bounds
:
{
width
,
height
},
startAngle
,
endAngle
,
backToCenter
,
_margin
,
_useCacheMode
}
=
this
;
const
{
bounds
:
{
width
,
height
},
startAngle
,
endAngle
,
backToCenter
,
_margin
,
_useCacheMode
}
=
this
;
let
offset
=
_useCacheMode
?
_margin
:
0
;
let
offset
=
_useCacheMode
?
_margin
:
0
;
const
radius
=
Math
.
min
(
width
,
height
)
/
2
;
const
radius
=
Math
.
min
(
width
,
height
)
/
2
;
const
pos
=
offset
+
radius
;
const
pos
=
offset
+
radius
;
if
(
startAngle
==
0
&&
endAngle
==
360
){
if
(
startAngle
==
0
&&
endAngle
==
360
){
c
urrentCanvasC
ontext
.
arc
(
pos
,
pos
,
radius
,
0
,
2
*
Math
.
PI
);
context
.
arc
(
pos
,
pos
,
radius
,
0
,
2
*
Math
.
PI
);
}
else
{
}
else
{
if
(
backToCenter
){
if
(
backToCenter
){
c
urrentCanvasC
ontext
.
moveTo
(
pos
,
pos
);
context
.
moveTo
(
pos
,
pos
);
}
}
c
urrentCanvasC
ontext
.
arc
(
pos
,
pos
,
radius
,
startAngle
*
Math
.
PI
/
180
,
endAngle
*
Math
.
PI
/
180
);
context
.
arc
(
pos
,
pos
,
radius
,
startAngle
*
Math
.
PI
/
180
,
endAngle
*
Math
.
PI
/
180
);
if
(
backToCenter
){
if
(
backToCenter
){
c
urrentCanvasC
ontext
.
lineTo
(
pos
,
pos
);
context
.
lineTo
(
pos
,
pos
);
}
}
}
}
super
.
draw
();
super
.
draw
(
context
);
}
}
}
}
src/core/nodes/GraphicNode.ts
View file @
b0e7836a
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
* 绘制节点
* 绘制节点
*/
*/
import
{
Node
}
from
".
.
/Node"
;
import
{
Node
}
from
"./Node"
;
import
{
dirtyFieldDetector
}
from
"../../tools/decorators"
;
import
{
dirtyFieldDetector
}
from
"../../tools/decorators"
;
import
{
color
}
from
"../../ReType"
;
import
{
color
}
from
"../../ReType"
;
...
@@ -38,6 +38,12 @@ export class GraphicNode extends Node {
...
@@ -38,6 +38,12 @@ export class GraphicNode extends Node {
useCacheMode
=
true
;
useCacheMode
=
true
;
measureBounds
()
{
super
.
measureBounds
();
this
.
_margin
=
this
.
borderWidth
;
}
protected
getUseCacheMode
(){
protected
getUseCacheMode
(){
return
this
.
_useCacheMode
&&
!
this
.
isMask
;
return
this
.
_useCacheMode
&&
!
this
.
isMask
;
}
}
...
...
src/core/nodes/Image.ts
0 → 100644
View file @
b0e7836a
/**
* Created by rockyl on 2019-07-11.
*
* 图片显示类
*/
import
{
Node
,}
from
"./Node"
;
import
Texture
from
"../Texture"
;
import
{
deepDirtyFieldDetector
,
dirtyFieldDetector
}
from
"../../tools/decorators"
;
import
{
Vector2D
}
from
"../../support"
;
import
Bounds
from
"../../support/Bounds"
;
import
{
Sheet
}
from
"../Sheet"
;
export
class
Image
extends
Node
{
/**
* 纹理资源
*/
@
dirtyFieldDetector
texture
:
Texture
;
/**
* 填充模式
*/
@
dirtyFieldDetector
fillMode
:
FillMode
=
FillMode
.
NORMAL
;
/**
* tiled模式的偏移
*/
@
deepDirtyFieldDetector
tiledOffset
:
Vector2D
=
new
Vector2D
();
/**
* 切片边界配置
*/
@
deepDirtyFieldDetector
slicedBounds
:
Bounds
=
new
Bounds
();
protected
_pattern
;
protected
_sheetForSliced
:
Sheet
=
new
Sheet
();
/**
* 异步资源
* @param promise
*/
private
set
async_texture
(
promise
:
Promise
<
Texture
>
)
{
if
(
!
promise
)
{
return
;
}
promise
.
then
(
(
texture
)
=>
{
this
.
texture
=
texture
;
}
)
}
/**
* 重写缓存模式
*/
protected
getUseCacheMode
()
{
return
this
.
_useCacheMode
||
this
.
fillMode
===
FillMode
.
TILED
||
this
.
fillMode
===
FillMode
.
SLICED
;
}
/**
* 准备切片用的图集
*/
protected
prepareSheetForSliced
()
{
if
(
this
.
dirty
&&
!
this
.
slicedBounds
.
isEmpty
)
{
const
sheet
=
this
.
_sheetForSliced
;
sheet
.
cleanAllTexture
();
const
{
sourceW
,
sourceH
}
=
this
.
texture
;
const
{
x
,
y
,
width
,
height
,
right
,
bottom
}
=
this
.
slicedBounds
;
const
xs
=
[
0
,
x
,
right
];
const
ys
=
[
0
,
y
,
bottom
];
const
ws
=
[
x
,
width
,
sourceW
-
right
];
const
hs
=
[
y
,
height
,
sourceH
-
bottom
];
const
frames
=
{};
for
(
let
i
=
0
;
i
<
9
;
i
++
){
let
gx
=
i
%
3
;
let
gy
=
Math
.
floor
(
i
/
3
);
frames
[
i
]
=
{
x
:
xs
[
gx
],
y
:
ys
[
gy
],
width
:
ws
[
gx
],
height
:
hs
[
gy
],}
}
sheet
.
init
(
this
.
texture
,
frames
);
sheet
.
generateAll
();
}
}
protected
draw
(
context
)
{
super
.
draw
(
context
);
this
.
drawImage
(
context
);
}
/**
* 根据模式绘制图片
*/
drawImage
(
context
)
{
if
(
!
this
.
texture
)
{
return
;
}
const
{
texture
,
fillMode
,
width
,
height
}
=
this
;
const
{
x
,
y
,
sourceW
,
sourceH
}
=
texture
;
let
drawWidth
=
width
,
drawHeight
=
height
;
switch
(
fillMode
)
{
case
FillMode
.
NORMAL
:
texture
.
drawToCanvas
(
context
,
0
,
0
,
undefined
,
undefined
,
width
,
height
);
break
;
case
FillMode
.
SLICED
:
this
.
prepareSheetForSliced
();
const
{
x
:
sx
,
y
:
sy
,
right
,
bottom
}
=
this
.
slicedBounds
;
const
rightWidth
=
sourceW
-
right
;
const
bottomHeight
=
sourceH
-
bottom
;
const
xs
=
[
0
,
sx
,
drawWidth
-
rightWidth
];
const
ys
=
[
0
,
sy
,
drawHeight
-
bottomHeight
];
const
ws
=
[
sx
,
drawWidth
-
sx
-
rightWidth
,
rightWidth
];
const
hs
=
[
sy
,
drawHeight
-
sy
-
bottomHeight
,
bottomHeight
];
for
(
let
i
=
0
;
i
<
9
;
i
++
)
{
const
slicedTexture
=
this
.
_sheetForSliced
.
getTexture
(
i
);
let
gx
=
i
%
3
;
let
gy
=
Math
.
floor
(
i
/
3
);
console
.
log
(
xs
[
gx
],
ys
[
gy
]);
slicedTexture
.
drawToCanvas
(
context
,
xs
[
gx
],
ys
[
gy
],
undefined
,
undefined
,
ws
[
gx
],
hs
[
gy
]);
}
break
;
case
FillMode
.
TILED
:
if
(
!
this
.
_pattern
||
texture
[
'isDirty'
])
{
const
textureCanvas
=
texture
.
getCacheCanvas
();
this
.
_pattern
=
context
.
createPattern
(
textureCanvas
,
'repeat'
);
}
if
(
!
this
.
tiledOffset
.
isZero
)
{
const
{
x
:
offX
,
y
:
offY
}
=
this
.
tiledOffset
;
let
x
=
offX
%
sourceW
;
x
=
x
>
0
?
x
-
sourceW
:
x
;
let
y
=
offY
%
sourceH
;
y
=
y
>
0
?
y
-
sourceH
:
y
;
drawWidth
-=
x
;
drawHeight
-=
y
;
context
.
transform
(
1
,
0
,
0
,
1
,
x
,
y
);
}
context
.
beginPath
();
context
.
rect
(
0
,
0
,
drawWidth
,
drawHeight
);
context
.
closePath
();
context
.
fillStyle
=
this
.
_pattern
;
context
.
fill
();
if
(
!
this
.
tiledOffset
.
isZero
)
{
//ctx.restore();
}
break
;
}
}
protected
measureRenderSize
()
{
if
(
this
.
texture
)
{
const
{
sourceW
,
sourceH
}
=
this
.
texture
;
return
{
width
:
sourceW
,
height
:
sourceH
,
}
}
}
}
export
enum
FillMode
{
/**
* 正常
*/
NORMAL
,
/**
* 九宫裁切
*/
SLICED
,
/**
* 瓦片
*/
TILED
,
}
src/core/Node.ts
→
src/core/
nodes/
Node.ts
View file @
b0e7836a
...
@@ -4,14 +4,14 @@
...
@@ -4,14 +4,14 @@
* 节点类
* 节点类
*/
*/
import
Vector2D
from
"../support/Vector2D"
;
import
Vector2D
from
"../
../
support/Vector2D"
;
import
{
deepDirtyFieldDetector
,
dirtyFieldDetector
,}
from
"../tools/decorators"
;
import
{
deepDirtyFieldDetector
,
dirtyFieldDetector
,}
from
"../
../
tools/decorators"
;
import
Matrix
from
"../support/Matrix"
;
import
Matrix
from
"../
../
support/Matrix"
;
import
{
Bounds
}
from
"../support"
;
import
{
Bounds
}
from
"../
../
support"
;
import
{
Component
,
createCanvas
,
engine
,
ScillaEngine
}
from
"./index"
;
import
{
Component
,
createCanvas
,
engine
,
ScillaEngine
}
from
".
.
/index"
;
import
{
bubbling
,
traverse
}
from
"./utils"
;
import
{
bubbling
,
traverse
}
from
".
.
/utils"
;
import
{
EngineConfig
}
from
"../engine-config"
;
import
{
EngineConfig
}
from
"../
../
engine-config"
;
import
{
EventDispatcher
}
from
"./EventDispatcher"
;
import
{
EventDispatcher
}
from
".
.
/EventDispatcher"
;
export
class
Node
extends
EventDispatcher
{
export
class
Node
extends
EventDispatcher
{
name
=
'Node'
;
name
=
'Node'
;
...
@@ -104,6 +104,10 @@ export class Node extends EventDispatcher {
...
@@ -104,6 +104,10 @@ export class Node extends EventDispatcher {
* 全局逆矩阵
* 全局逆矩阵
*/
*/
protected
_globalInvertMatrix
:
Matrix
=
Matrix
.
create
();
protected
_globalInvertMatrix
:
Matrix
=
Matrix
.
create
();
/**
* 真实渲染透明度
*/
protected
_renderVisible
:
boolean
;
/**
/**
* 真实渲染透明度
* 真实渲染透明度
*/
*/
...
@@ -117,13 +121,13 @@ export class Node extends EventDispatcher {
...
@@ -117,13 +121,13 @@ export class Node extends EventDispatcher {
*/
*/
protected
_globalPosition
:
Vector2D
=
new
Vector2D
();
protected
_globalPosition
:
Vector2D
=
new
Vector2D
();
/**
/**
*
渲染边界
*
锚点实际偏移
*/
*/
protected
_
bounds
=
new
Bounds
();
protected
_
anchorOffset
:
Vector2D
=
new
Vector2D
();
/**
/**
*
锚点偏移
*
渲染边界
*/
*/
//protected _anchorOffset: Vector2D = new Vector2D
();
protected
_bounds
=
new
Bounds
();
/**
/**
* 尺寸
* 尺寸
* 对于不同的子类渲染都有不同的效果
* 对于不同的子类渲染都有不同的效果
...
@@ -575,6 +579,7 @@ export class Node extends EventDispatcher {
...
@@ -575,6 +579,7 @@ export class Node extends EventDispatcher {
if
(
!
this
.
enabled
)
{
if
(
!
this
.
enabled
)
{
return
;
return
;
}
}
this
.
preUpdate
(
t
);
this
.
preUpdate
(
t
);
this
.
updateComponents
(
t
);
this
.
updateComponents
(
t
);
this
.
onUpdate
(
t
);
this
.
onUpdate
(
t
);
...
@@ -712,20 +717,7 @@ export class Node extends EventDispatcher {
...
@@ -712,20 +717,7 @@ export class Node extends EventDispatcher {
* @param t
* @param t
*/
*/
protected
preUpdate
(
t
)
{
protected
preUpdate
(
t
)
{
if
(
this
.
dirty
)
{
this
.
updateLocalMatrix
();
}
this
.
updateGlobalMatrix
();
if
(
this
.
dirty
)
{
if
(
this
.
useCacheMode
)
{
this
.
readyCacheCanvas
();
}
this
.
measureBounds
();
if
(
this
.
useCacheMode
)
{
this
.
updateCacheCanvas
();
}
}
}
}
/**
/**
...
@@ -757,9 +749,24 @@ export class Node extends EventDispatcher {
...
@@ -757,9 +749,24 @@ export class Node extends EventDispatcher {
* @param t
* @param t
*/
*/
protected
windUpUpdate
(
t
)
{
protected
windUpUpdate
(
t
)
{
if
(
this
.
dirty
)
{
this
.
updateLocalMatrix
();
}
this
.
updateGlobalMatrix
();
if
(
this
.
dirty
)
{
if
(
this
.
useCacheMode
)
{
this
.
readyCacheCanvas
();
}
this
.
measureBounds
();
if
(
this
.
useCacheMode
)
{
this
.
updateCacheCanvas
();
}
}
this
.
transformToLocal
();
this
.
transformToLocal
();
if
(
this
.
v
isible
)
{
if
(
this
.
_renderV
isible
)
{
this
.
render
();
this
.
render
();
}
}
...
@@ -796,11 +803,17 @@ export class Node extends EventDispatcher {
...
@@ -796,11 +803,17 @@ export class Node extends EventDispatcher {
return
;
return
;
}
}
const
{
bounds
,
explicitWidth
,
explicitHeight
}
=
this
;
const
{
bounds
,
explicitWidth
,
explicitHeight
,
anchor
:
{
x
,
y
}
}
=
this
;
let
renderSize
:
any
=
this
.
measureRenderSize
();
let
renderSize
:
any
=
this
.
measureRenderSize
();
bounds
.
width
=
renderSize
?
renderSize
.
width
:
isNaN
(
explicitWidth
)
?
0
:
explicitWidth
;
bounds
.
width
=
isNaN
(
explicitWidth
)
?
renderSize
?
renderSize
.
width
:
0
:
explicitWidth
;
bounds
.
height
=
renderSize
?
renderSize
.
height
:
isNaN
(
explicitHeight
)
?
0
:
explicitHeight
;
bounds
.
height
=
isNaN
(
explicitHeight
)
?
renderSize
?
renderSize
.
height
:
0
:
explicitHeight
;
const
anchorOffsetX
=
this
.
_anchorOffset
.
x
=
bounds
.
width
*
x
;
const
anchorOffsetY
=
this
.
_anchorOffset
.
y
=
bounds
.
height
*
y
;
bounds
.
x
=
-
anchorOffsetX
;
bounds
.
y
=
-
anchorOffsetY
;
}
}
/**
/**
...
@@ -822,7 +835,6 @@ export class Node extends EventDispatcher {
...
@@ -822,7 +835,6 @@ export class Node extends EventDispatcher {
if
(
this
.
useCacheMode
)
{
if
(
this
.
useCacheMode
)
{
this
.
draw
(
this
.
currentCanvasContext
);
this
.
draw
(
this
.
currentCanvasContext
);
}
}
this
.
dirty
=
false
;
}
}
if
(
this
.
useCacheMode
)
{
if
(
this
.
useCacheMode
)
{
...
@@ -964,12 +976,19 @@ export class Node extends EventDispatcher {
...
@@ -964,12 +976,19 @@ export class Node extends EventDispatcher {
}
}
/**
/**
*
真实
渲染透明度
*
实际
渲染透明度
*/
*/
get
renderAlpha
():
number
{
get
renderAlpha
():
number
{
return
this
.
_renderAlpha
;
return
this
.
_renderAlpha
;
}
}
/**
* 实际可见性
*/
get
renderVisible
():
boolean
{
return
this
.
_renderVisible
;
}
/**
/**
* 渲染边界
* 渲染边界
*/
*/
...
@@ -1016,10 +1035,10 @@ export class Node extends EventDispatcher {
...
@@ -1016,10 +1035,10 @@ export class Node extends EventDispatcher {
const
matrix
=
this
.
_localMatrix
;
const
matrix
=
this
.
_localMatrix
;
matrix
.
identity
();
matrix
.
identity
();
matrix
.
translate
(
/*
matrix.translate(
-ax * width,
-ax * width,
-ay * height,
-ay * height,
);
);
*/
matrix
.
scale
(
sx
,
sy
);
matrix
.
scale
(
sx
,
sy
);
matrix
.
rotate
(
rotation
*
Math
.
PI
/
180
);
matrix
.
rotate
(
rotation
*
Math
.
PI
/
180
);
...
@@ -1043,9 +1062,11 @@ export class Node extends EventDispatcher {
...
@@ -1043,9 +1062,11 @@ export class Node extends EventDispatcher {
if
(
parent
)
{
if
(
parent
)
{
this
.
_renderAlpha
=
parent
.
renderAlpha
*
this
.
alpha
;
this
.
_renderAlpha
=
parent
.
renderAlpha
*
this
.
alpha
;
this
.
_renderVisible
=
parent
.
renderVisible
&&
this
.
visible
;
_globalMatrix
.
concat
(
parent
.
getMatrix
(
false
));
_globalMatrix
.
concat
(
parent
.
getMatrix
(
false
));
}
else
{
}
else
{
this
.
_renderAlpha
=
this
.
alpha
;
this
.
_renderAlpha
=
this
.
alpha
;
this
.
_renderVisible
=
this
.
visible
;
}
}
}
}
...
@@ -1053,8 +1074,12 @@ export class Node extends EventDispatcher {
...
@@ -1053,8 +1074,12 @@ export class Node extends EventDispatcher {
* 执行矩阵转换
* 执行矩阵转换
*/
*/
protected
transformToLocal
()
{
protected
transformToLocal
()
{
const
{
_anchorOffset
:
{
x
:
ax
,
y
:
ay
}}
=
this
;
const
{
a
,
b
,
c
,
d
,
tx
,
ty
}
=
this
.
getMatrix
(
false
,
true
);
const
{
a
,
b
,
c
,
d
,
tx
,
ty
}
=
this
.
getMatrix
(
false
,
true
);
this
.
context
.
setTransform
(
a
,
b
,
c
,
d
,
tx
,
ty
);
const
offX
=
ax
*
a
+
ay
*
c
;
const
offY
=
ax
*
b
+
ay
*
d
;
this
.
context
.
setTransform
(
a
,
b
,
c
,
d
,
tx
-
offX
,
ty
-
offY
);
}
}
/**
/**
...
...
src/core/nodes/index.ts
View file @
b0e7836a
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
* Created by rockyl on 2019-07-05.
* Created by rockyl on 2019-07-05.
*/
*/
export
*
from
'./Node'
export
*
from
'./GraphicNode'
export
*
from
'./GraphicNode'
export
*
from
'./Rect'
export
*
from
'./Rect'
export
*
from
'./Circle'
export
*
from
'./Circle'
export
*
from
'./Image'
src/core/utils.ts
View file @
b0e7836a
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
* 节点相关工具
* 节点相关工具
*/
*/
import
{
Node
}
from
"./Node"
;
import
{
Node
}
from
"./
nodes/
Node"
;
/**
/**
* 节点遍历(先序遍历)
* 节点遍历(先序遍历)
...
@@ -33,7 +33,7 @@ export function traverse(target: Node, hitChild: (child: Node, ...params) => boo
...
@@ -33,7 +33,7 @@ export function traverse(target: Node, hitChild: (child: Node, ...params) => boo
}
}
}
}
fullCallback
&&
fullCallback
(
target
);
!
interrupt
&&
fullCallback
&&
fullCallback
(
target
);
}
}
/**
/**
...
@@ -46,8 +46,6 @@ export function traverse(target: Node, hitChild: (child: Node, ...params) => boo
...
@@ -46,8 +46,6 @@ export function traverse(target: Node, hitChild: (child: Node, ...params) => boo
* @param params 其他参数
* @param params 其他参数
*/
*/
export
function
traversePostorder
(
target
:
Node
,
hitChild
:
(
child
:
Node
,
...
params
)
=>
boolean
,
level
=
-
1
,
includeSelf
=
false
,
fullCallback
?:
(
current
:
Node
)
=>
void
,
...
params
)
{
export
function
traversePostorder
(
target
:
Node
,
hitChild
:
(
child
:
Node
,
...
params
)
=>
boolean
,
level
=
-
1
,
includeSelf
=
false
,
fullCallback
?:
(
current
:
Node
)
=>
void
,
...
params
)
{
let
interrupt
;
if
(
level
!==
0
)
{
if
(
level
!==
0
)
{
for
(
let
i
=
target
.
children
.
length
-
1
;
i
>=
0
;
i
--
)
{
for
(
let
i
=
target
.
children
.
length
-
1
;
i
>=
0
;
i
--
)
{
const
child
=
target
.
children
[
i
];
const
child
=
target
.
children
[
i
];
...
@@ -68,7 +66,7 @@ export function traversePostorder(target: Node, hitChild: (child: Node, ...param
...
@@ -68,7 +66,7 @@ export function traversePostorder(target: Node, hitChild: (child: Node, ...param
hitChild
(
target
,
...
params
);
hitChild
(
target
,
...
params
);
}
}
!
interrupt
&&
fullCallback
&&
fullCallback
(
target
);
fullCallback
&&
fullCallback
(
target
);
}
}
/**
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment