Skip to content

Commit 8a036e8

Browse files
committed
Merge branch 'editor-save-value' into editor-save-value-latest-sdk
2 parents 87e3b8b + c9b8689 commit 8a036e8

File tree

2 files changed

+115
-120
lines changed

2 files changed

+115
-120
lines changed

defold-spine/editor/src/spineext.clj

Lines changed: 87 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,35 @@
1313
(ns editor.spineext
1414
(:require [clojure.java.io :as io]
1515
[clojure.string :as str]
16-
[editor.protobuf :as protobuf]
1716
[dynamo.graph :as g]
18-
[util.murmur :as murmur]
1917
[editor.build-target :as bt]
20-
[editor.graph-util :as gu]
18+
[editor.defold-project :as project]
2119
[editor.geom :as geom]
22-
[editor.material :as material]
23-
[editor.math :as math]
2420
[editor.gl :as gl]
21+
[editor.gl.pass :as pass]
2522
[editor.gl.shader :as shader]
2623
[editor.gl.texture :as texture]
2724
[editor.gl.vertex :as vtx]
28-
[editor.defold-project :as project]
25+
[editor.graph-util :as gu]
26+
[editor.material :as material]
27+
[editor.math :as math]
28+
[editor.outline :as outline]
29+
[editor.properties :as properties]
30+
[editor.protobuf :as protobuf]
31+
[editor.render :as render]
2932
[editor.resource :as resource]
3033
[editor.resource-node :as resource-node]
31-
[editor.scene-cache :as scene-cache] ; debug only
32-
[editor.scene-picking :as scene-picking]
33-
[editor.render :as render]
34+
[editor.types :as types]
3435
[editor.validation :as validation]
3536
[editor.workspace :as workspace]
36-
[editor.gl.pass :as pass]
37-
[editor.types :as types]
38-
[editor.outline :as outline]
39-
[editor.properties :as properties]
40-
[editor.rig :as rig])
37+
[util.murmur :as murmur])
4138
(:import [com.dynamo.bob.textureset TextureSetGenerator$UVTransform]
42-
[com.dynamo.bob.util BezierUtil RigUtil$Transform]
39+
[com.jogamp.opengl GL GL2]
4340
[editor.gl.shader ShaderLifecycle]
4441
[editor.types AABB]
45-
[com.jogamp.opengl GL GL2 GLContext]
46-
[org.apache.commons.io IOUtils]
4742
[java.io IOException]
48-
[java.util HashSet]
49-
[java.net URL]
50-
[javax.vecmath Matrix4d Vector3d Vector4d]))
51-
43+
[javax.vecmath Matrix4d Vector3d Vector4d]
44+
[org.apache.commons.io IOUtils]))
5245

5346
(set! *warn-on-reflection* true)
5447

@@ -187,8 +180,9 @@
187180

188181

189182
(g/defnk produce-spine-scene-pb [_node-id spine-json atlas]
190-
{:spine_json (resource/resource->proj-path spine-json)
191-
:atlas (resource/resource->proj-path atlas)})
183+
(protobuf/make-map-without-defaults spine-plugin-spinescene-cls
184+
:spine-json (resource/resource->proj-path spine-json)
185+
:atlas (resource/resource->proj-path atlas)))
192186

193187
;; (defn- transform-positions [^Matrix4d transform mesh]
194188
;; (let [p (Point3d.)]
@@ -466,11 +460,11 @@
466460
(inherits outline/OutlineNode)
467461
(property name g/Str (dynamic read-only? (g/constantly true)))
468462
(property position types/Vec3
469-
(dynamic edit-type (g/constantly (properties/vec3->vec2 0.0)))
463+
(dynamic edit-type (g/constantly {:type types/Vec2}))
470464
(dynamic read-only? (g/constantly true)))
471465
(property rotation g/Num (dynamic read-only? (g/constantly true)))
472466
(property scale types/Vec3
473-
(dynamic edit-type (g/constantly (properties/vec3->vec2 1.0)))
467+
(dynamic edit-type (g/constantly {:type types/Vec2}))
474468
(dynamic read-only? (g/constantly true)))
475469
(property length g/Num
476470
(dynamic read-only? (g/constantly true)))
@@ -509,7 +503,7 @@
509503
scale-y (.-scaleY spine-bone)
510504
length (.-length spine-bone)
511505
parent-graph-id (g/node-id->graph-id parent-id)
512-
bone-tx-data (g/make-nodes parent-graph-id [bone [SpineBone :name name :position [x y 0] :rotation rotation :scale [scale-x scale-y 1.0] :length length]]
506+
bone-tx-data (g/make-nodes parent-graph-id [bone [SpineBone :name name :position [x y protobuf/float-zero] :rotation rotation :scale [scale-x scale-y protobuf/float-one] :length length]]
513507
; Hook this node into the parent's lists
514508
(g/connect bone :_node-id parent-id :nodes)
515509
(g/connect bone :node-outline parent-id :child-outlines)
@@ -636,20 +630,19 @@
636630
(handle-read-error error _node-id spine-json-resource))))
637631

638632
(defn- sanitize-spine-scene [spine-scene-desc]
639-
{:pre (map? spine-scene-desc)} ; Spine$SpineSceneDesc in map format.
633+
{:pre [(map? spine-scene-desc)]} ; Spine$SpineSceneDesc in map format.
640634
(dissoc spine-scene-desc :sample-rate)) ; Deprecated field.
641635

642-
(defn- load-spine-scene [project self resource spine]
643-
(let [spine-resource (workspace/resolve-resource resource (:spine-json spine))
644-
atlas (workspace/resolve-resource resource (:atlas spine))
645-
; used for previewing a .spinescene as it doesn't have a material specified
646-
material (workspace/resolve-resource resource spine-material-path)]
636+
(defn- load-spine-scene [project self resource spine-scene-desc]
637+
{:pre [(map? spine-scene-desc)]} ; Spine$SpineSceneDesc in map format.
638+
(let [resolve-resource #(workspace/resolve-resource resource %)
639+
default-material-resource (resolve-resource spine-material-path)]
647640
(concat
648-
(g/connect project :default-tex-params self :default-tex-params)
649-
(g/set-property self
650-
:spine-json spine-resource
651-
:atlas atlas
652-
:material material))))
641+
(g/connect project :default-tex-params self :default-tex-params)
642+
(g/set-property self :material default-material-resource)
643+
(gu/set-properties-from-pb-map self spine-plugin-spinescene-cls spine-scene-desc
644+
spine-json (resolve-resource :spine-json)
645+
atlas (resolve-resource :atlas)))))
653646

654647
;; (defn- make-spine-skeleton-scene [_node-id aabb gpu-texture scene-structure]
655648
;; (let [scene {:node-id _node-id :aabb aabb}]
@@ -786,18 +779,15 @@
786779
;;//////////////////////////////////////////////////////////////////////////////////////////////
787780

788781
(g/defnk produce-model-pb [spine-scene-resource blend-mode default-animation skin material-resource create-go-bones playback-rate offset]
789-
(cond-> {:spine-scene (resource/resource->proj-path spine-scene-resource)
790-
:default-animation default-animation
791-
:skin skin
792-
:material (resource/resource->proj-path material-resource)
793-
:blend-mode blend-mode
794-
:create-go-bones create-go-bones}
795-
796-
(not= 1.0 playback-rate)
797-
(assoc :playback-rate playback-rate)
798-
799-
(not= 0.0 offset)
800-
(assoc :offset offset)))
782+
(protobuf/make-map-without-defaults spine-plugin-spinemodel-cls
783+
:spine-scene (resource/resource->proj-path spine-scene-resource)
784+
:default-animation default-animation
785+
:skin skin
786+
:material (resource/resource->proj-path material-resource)
787+
:blend-mode blend-mode
788+
:create-go-bones create-go-bones
789+
:playback-rate playback-rate
790+
:offset offset))
801791

802792
(defn ->skin-choicebox [spine-skins]
803793
(properties/->choicebox (cons "" (remove (partial = "default") spine-skins))))
@@ -840,7 +830,7 @@
840830
(defn- build-spine-model [resource dep-resources user-data]
841831
(let [pb (:proto-msg user-data)
842832
pb (reduce #(assoc %1 (first %2) (second %2)) pb (map (fn [[label res]] [label (resource/proj-path (get dep-resources res))]) (:dep-resources user-data)))]
843-
{:resource resource :content (protobuf/map->bytes (workspace/load-class! "com.dynamo.spine.proto.Spine$SpineModelDesc") pb)}))
833+
{:resource resource :content (protobuf/map->bytes spine-plugin-spinemodel-cls pb)}))
844834

845835
(g/defnk produce-model-build-targets [_node-id own-build-errors resource model-pb spine-scene-resource material-resource dep-build-targets]
846836
(g/precluding-errors own-build-errors
@@ -856,15 +846,20 @@
856846
:dep-resources dep-resources}
857847
:deps dep-build-targets})])))
858848

859-
(defn load-spine-model [project self resource spine]
860-
(let [resolve-fn (partial workspace/resolve-resource resource)
861-
spine (-> spine
862-
(update :spine-scene resolve-fn)
863-
(update :material resolve-fn))]
849+
(defn load-spine-model [project self resource spine-model-desc]
850+
{:pre [(map? spine-model-desc)]} ; Spine$SpineModelDesc in map format.
851+
(let [resolve-resource #(workspace/resolve-resource resource %)]
864852
(concat
865-
(g/connect project :default-tex-params self :default-tex-params)
866-
(for [[k v] spine]
867-
(g/set-property self k v)))))
853+
(g/connect project :default-tex-params self :default-tex-params)
854+
(gu/set-properties-from-pb-map self spine-plugin-spinemodel-cls spine-model-desc
855+
spine-scene (resolve-resource :spine-scene)
856+
default-animation :default-animation
857+
skin :skin
858+
blend-mode :blend-mode
859+
material (resolve-resource (:material :or spine-material-path))
860+
create-go-bones :create-go-bones
861+
playback-rate :playback-rate
862+
offset :offset))))
868863

869864
(defn- step-animation
870865
[state dt spine-data-handle animation skin]
@@ -925,8 +920,8 @@
925920
(validate-model-skin _node-id spine-scene skins skin)))
926921
(dynamic edit-type (g/fnk [skins] (->skin-choicebox skins))))
927922
(property create-go-bones g/Bool (default false))
928-
(property playback-rate g/Num (default 1.0))
929-
(property offset g/Num (default 0.0)
923+
(property playback-rate g/Num (default (float 1.0)))
924+
(property offset g/Num (default (float 0.0))
930925
(dynamic edit-type (g/constantly {:type :slider
931926
:min 0.0
932927
:max 1.0
@@ -1000,38 +995,38 @@
1000995

1001996
(defn register-resource-types [workspace]
1002997
(concat
1003-
(resource-node/register-ddf-resource-type workspace
1004-
:ext spine-scene-ext
1005-
:label "Spine Scene"
1006-
:node-type SpineSceneNode
1007-
:ddf-type spine-plugin-spinescene-cls
1008-
:sanitize-fn sanitize-spine-scene
1009-
:load-fn load-spine-scene
1010-
:icon spine-scene-icon
1011-
:view-types [:scene :text]
1012-
:view-opts {:scene {:grid true}}
1013-
:template "/defold-spine/editor/resources/templates/template.spinescene")
1014-
(resource-node/register-ddf-resource-type workspace
1015-
:ext spine-model-ext
1016-
:label "Spine Model"
1017-
:node-type SpineModelNode
1018-
:ddf-type spine-plugin-spinemodel-cls
1019-
:load-fn load-spine-model
1020-
:icon spine-model-icon
1021-
:view-types [:scene :text]
1022-
:view-opts {:scene {:grid true}}
1023-
:tags #{:component}
1024-
:tag-opts {:component {:transform-properties #{:position :rotation :scale}}}
1025-
:template "/defold-spine/editor/resources/templates/template.spinemodel")
1026-
(workspace/register-resource-type workspace
1027-
:ext spine-json-ext
1028-
:node-type SpineSceneJson
1029-
:textual? true
1030-
:load-fn load-spine-json
1031-
:icon spine-json-icon
1032-
:view-types [:default]
1033-
:tags #{:embeddable})))
1034-
998+
(resource-node/register-ddf-resource-type workspace
999+
:ext spine-scene-ext
1000+
:label "Spine Scene"
1001+
:node-type SpineSceneNode
1002+
:ddf-type spine-plugin-spinescene-cls
1003+
:read-defaults false
1004+
:sanitize-fn sanitize-spine-scene
1005+
:load-fn load-spine-scene
1006+
:icon spine-scene-icon
1007+
:view-types [:scene :text]
1008+
:view-opts {:scene {:grid true}}
1009+
:template "/defold-spine/editor/resources/templates/template.spinescene")
1010+
(resource-node/register-ddf-resource-type workspace
1011+
:ext spine-model-ext
1012+
:label "Spine Model"
1013+
:node-type SpineModelNode
1014+
:ddf-type spine-plugin-spinemodel-cls
1015+
:read-defaults false
1016+
:load-fn load-spine-model
1017+
:icon spine-model-icon
1018+
:view-types [:scene :text]
1019+
:view-opts {:scene {:grid true}}
1020+
:tags #{:component}
1021+
:tag-opts {:component {:transform-properties #{:position :rotation :scale}}}
1022+
:template "/defold-spine/editor/resources/templates/template.spinemodel")
1023+
(workspace/register-resource-type workspace
1024+
:ext spine-json-ext
1025+
:node-type SpineSceneJson
1026+
:textual? true
1027+
:load-fn load-spine-json
1028+
:icon spine-json-icon
1029+
:view-types [:default])))
10351030

10361031
; The plugin
10371032
(defn load-plugin-spine [workspace]

defold-spine/editor/src/spineguiext.clj

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,25 @@
1111
;; specific language governing permissions and limitations under the License.
1212

1313
(ns editor.spineguiext
14-
(:require [schema.core :as s]
14+
(:require [editor.protobuf :as protobuf]
1515
[clojure.string :as str]
1616
[dynamo.graph :as g]
17-
[util.murmur :as murmur]
18-
[editor.graph-util :as gu]
19-
[editor.geom :as geom]
2017
[editor.defold-project :as project]
21-
[editor.resource :as resource]
22-
[editor.scene-cache :as scene-cache] ; debug only
23-
[editor.workspace :as workspace]
24-
[editor.types :as types]
18+
[editor.geom :as geom]
19+
[editor.gl.texture]
20+
[editor.graph-util :as gu]
21+
[editor.gui :as gui]
2522
[editor.outline :as outline]
2623
[editor.properties :as properties]
27-
[editor.gui :as gui]
28-
[editor.spineext :as spineext])
29-
(:import [com.dynamo.gamesys.proto Gui$NodeDesc$ClippingMode]
24+
[editor.resource :as resource]
25+
[editor.spineext :as spineext]
26+
[editor.workspace :as workspace]
27+
[schema.core :as s]
28+
[util.murmur :as murmur])
29+
(:import [com.dynamo.gamesys.proto Gui$NodeDesc Gui$NodeDesc$ClippingMode]
3030
[editor.gl.texture TextureLifecycle]
3131
[javax.vecmath Matrix4d Point3d]))
3232

33-
3433
(set! *warn-on-reflection* true)
3534

3635
(g/deftype ^:private SpineSceneElementIds s/Any #_{s/Str {:spine-anim-ids (sorted-set s/Str)
@@ -98,21 +97,21 @@
9897
vb-out))
9998

10099
(g/defnk produce-spine-node-msg [visual-base-node-msg spine-scene spine-default-animation spine-skin clipping-mode clipping-visible clipping-inverted]
101-
(assoc visual-base-node-msg
102-
:size [1.0 1.0 0.0 1.0]
103-
:size-mode :size-mode-auto
104-
:spine-scene spine-scene
105-
:spine-default-animation spine-default-animation
106-
:spine-skin spine-skin
107-
:clipping-mode clipping-mode
108-
:clipping-visible clipping-visible
109-
:clipping-inverted clipping-inverted))
100+
(merge visual-base-node-msg
101+
(protobuf/make-map-without-defaults Gui$NodeDesc
102+
:size-mode :size-mode-auto
103+
:spine-scene spine-scene
104+
:spine-default-animation spine-default-animation
105+
:spine-skin spine-skin
106+
:clipping-mode clipping-mode
107+
:clipping-visible clipping-visible
108+
:clipping-inverted clipping-inverted)))
110109

111110
(g/defnode SpineNode
112111
(inherits gui/VisualNode)
113112

114113
(property spine-scene g/Str
115-
(default "")
114+
(default (protobuf/default Gui$NodeDesc :spine-scene))
116115
(dynamic edit-type (g/fnk [spine-scene-names] (gui/required-gui-resource-choicebox spine-scene-names)))
117116
(dynamic error (g/fnk [_node-id spine-scene spine-scene-names]
118117
(validate-spine-scene _node-id spine-scene-names spine-scene))))
@@ -127,10 +126,10 @@
127126
(validate-spine-skin _node-id spine-scene-names spine-skin-ids spine-skin spine-scene)))
128127
(dynamic edit-type (g/fnk [spine-skin-ids] (spineext/->skin-choicebox spine-skin-ids))))
129128

130-
(property clipping-mode g/Keyword (default :clipping-mode-none)
129+
(property clipping-mode g/Keyword (default (protobuf/default Gui$NodeDesc :clipping-mode))
131130
(dynamic edit-type (g/constantly (properties/->pb-choicebox Gui$NodeDesc$ClippingMode))))
132-
(property clipping-visible g/Bool (default true))
133-
(property clipping-inverted g/Bool (default false))
131+
(property clipping-visible g/Bool (default (protobuf/default Gui$NodeDesc :clipping-visible)))
132+
(property clipping-inverted g/Bool (default (protobuf/default Gui$NodeDesc :clipping-inverted)))
134133

135134
(display-order (into gui/base-display-order
136135
[:spine-scene :spine-default-animation :spine-skin :color :alpha :inherit-alpha :layer :blend-mode :pivot :x-anchor :y-anchor
@@ -350,7 +349,6 @@
350349
(defn- fixup-spine-node [node-type-info node-desc]
351350
(let [node-type (:type node-desc)]
352351
(cond-> (assoc node-desc
353-
:size [1.0 1.0 0.0 1.0]
354352
:size-mode :size-mode-auto)
355353

356354
(= :type-spine node-type)
@@ -365,12 +363,14 @@
365363
:display-name "Spine"
366364
:custom-type (murmur/hash32 "Spine")
367365
:icon spineext/spine-scene-icon
368-
:convert-fn fixup-spine-node}
366+
:convert-fn fixup-spine-node
367+
:defaults gui/visual-base-node-defaults}
369368
info-depr (merge info {:node-type :type-spine
370369
:custom-type 0
371370
:output-node-type (:node-type info)
372371
:output-custom-type (:custom-type info)
373-
:deprecated true})]
372+
:deprecated true
373+
:defaults gui/visual-base-node-defaults})]
374374
(gui/register-node-type-info! info)
375375
; Register :type-spine with custom type 0 in order to be able to read old files
376376
(gui/register-node-type-info! info-depr)))

0 commit comments

Comments
 (0)