Skip to content

Commit

Permalink
basic work version
Browse files Browse the repository at this point in the history
  • Loading branch information
Z2Y committed Oct 3, 2020
1 parent 30d44b6 commit 81b1258
Show file tree
Hide file tree
Showing 11 changed files with 5,811 additions and 2,822 deletions.
17 changes: 13 additions & 4 deletions bone/ArmatureDisplay.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ func NewArmatureDisplay() *ArmatureDisplay {
face := wrapper.NewDirectorIArmatureProxy(om)
om.base = face

data := &ArmatureDisplay{IArmatureProxy: face, om: om}
boneObjectAdd(data.Swigcptr(), data)
return data
display := &ArmatureDisplay{IArmatureProxy: face, om: om}
display.RenderComponent.Drawable = display
boneObjectAdd(display.Swigcptr(), display)
return display
}

type overwrittenMethodsOnArmatureDisplay struct {
Expand All @@ -50,7 +51,7 @@ func (om *overwrittenMethodsOnArmatureDisplay) DbClear() {
}

func (om *overwrittenMethodsOnArmatureDisplay) DbUpdate() {
log.Println("DbUpdate")
// log.Println("DbUpdate")
}

func (om *overwrittenMethodsOnArmatureDisplay) Dispose(bool) {
Expand All @@ -60,6 +61,14 @@ func (om *overwrittenMethodsOnArmatureDisplay) Dispose(bool) {
}
}

func (om *overwrittenMethodsOnArmatureDisplay) GetArmature() wrapper.Armature {
return om.armature
}

func (om *overwrittenMethodsOnArmatureDisplay) HasDBEventListener(name string) bool {
return false
}

func (om *overwrittenMethodsOnArmatureDisplay) GetAnimation() wrapper.Animation {
return om.armature.GetAnimation()
}
40 changes: 39 additions & 1 deletion bone/Display.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package bone

import "github.com/EngoEngine/gl"
import (
"github.com/EngoEngine/engo"
"github.com/EngoEngine/engo/common"
"github.com/EngoEngine/gl"
)

type IDisplay interface {
GetParent() IDisplay
Expand All @@ -9,6 +13,8 @@ type IDisplay interface {
RemoveChild(IDisplay)
GetChildren() []IDisplay
RemoveFromParent()
UpdateTransform(force bool)
GetGlobalTransform() *engo.Matrix

Texture() *gl.Texture
Width() float32
Expand All @@ -20,6 +26,12 @@ type IDisplay interface {
type Display struct {
Parent IDisplay
Children []IDisplay

common.RenderComponent
common.SpaceComponent
transformMatrix *engo.Matrix
globalTransform *engo.Matrix
transformDirty bool
}

func (d *Display) GetParent() IDisplay {
Expand Down Expand Up @@ -57,6 +69,32 @@ func (d *Display) RemoveFromParent() {
}
}

func (d *Display) SetTransform(transformMatrix *engo.Matrix) {
// log.Println("SetTransform", transformMatrix)
d.transformMatrix = transformMatrix
d.transformDirty = true
}

func (d *Display) GetGlobalTransform() *engo.Matrix {
return d.globalTransform
}

func (d *Display) UpdateTransform(force bool) {
if d.Parent == nil {
d.globalTransform = engo.IdentityMatrix().Translate(d.Position.X, d.Position.Y).Rotate(d.Rotation)
} else if d.transformMatrix != nil && (d.transformDirty || force) {
d.globalTransform = engo.IdentityMatrix().Set(d.Parent.GetGlobalTransform().Val[:]).Multiply(d.transformMatrix)

d.SpaceComponent.Position.X, d.SpaceComponent.Position.Y = d.globalTransform.TranslationComponent()
d.SpaceComponent.Rotation = d.globalTransform.RotationComponent()
}

for _, child := range d.Children {
child.UpdateTransform(true)
}
d.transformDirty = false
}

func (d *Display) Width() float32 {
return 0
}
Expand Down
7 changes: 2 additions & 5 deletions bone/Factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func (factory *DragonBoneFactory) LoadTextureAtlasData(reader io.Reader, name st
func (factory *DragonBoneFactory) BuildArmatureDisplay(args ...interface{}) *ArmatureDisplay {
armature := factory.BuildArmature(args...)
if armature.Swigcptr() != 0 {
factory.dragonBonesInstance().GetClock().Add(armature)
factory.dragonBonesInstance().GetClock().AddArmature(armature)
return boneObjectLookup(armature.GetDisplay()).(*ArmatureDisplay)
}
return nil
Expand All @@ -96,7 +96,6 @@ type overwrittenMethodsOnFactory struct {
}

func (om *overwrittenMethodsOnFactory) X_buildTextureAtlasData(data wrapper.TextureAtlasData, textureAtlas uintptr) wrapper.TextureAtlasData {
log.Println("build texture", data.Swigcptr(), textureAtlas)
if data.Swigcptr() == 0 {
textureAtlasData := NewTextureAtlasData()
return textureAtlasData
Expand All @@ -113,18 +112,16 @@ func (om *overwrittenMethodsOnFactory) X_buildTextureAtlasData(data wrapper.Text
}

func (om *overwrittenMethodsOnFactory) X_buildArmature(dataPackage wrapper.BuildArmaturePackage) wrapper.Armature {
log.Println("BuildArmature")
a := wrapper.BaseObjectBorrowArmatureObject()
armatureDisplay := NewArmatureDisplay()
a.Init(dataPackage.GetArmature(), armatureDisplay, armatureDisplay.Swigcptr(), om.dragonBones)
return a
}

func (om *overwrittenMethodsOnFactory) X_buildSlot(dataPackage wrapper.BuildArmaturePackage, slotData wrapper.DragonBones_SlotData, armature wrapper.Armature) wrapper.Slot {
func (om *overwrittenMethodsOnFactory) X_buildSlot(dataPackage wrapper.BuildArmaturePackage, slotData wrapper.SlotData, armature wrapper.Armature) wrapper.Slot {
slot := NewSlot()
sprite := NewSprite()
boneObjectAdd(uintptr(unsafe.Pointer(sprite)), sprite)
slot.Init(slotData, armature, uintptr(unsafe.Pointer(sprite)), uintptr(unsafe.Pointer(sprite)))
log.Println("BuildSlot", slot.Swigcptr())
return slot
}
11 changes: 8 additions & 3 deletions bone/Shader.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,18 @@ func (db *DragonBoneShader) Pre() {
}

func (db *DragonBoneShader) Draw(rc *common.RenderComponent, sc *common.SpaceComponent) {
db.DrawDisplay(rc.Drawable.(IDisplay), sc)
display, ok := rc.Drawable.(IDisplay)
if !ok {
return
}
display.UpdateTransform(true)
db.DrawDisplay(rc.Drawable.(IDisplay))
}

func (db *DragonBoneShader) DrawDisplay(iDisplay IDisplay, sc *common.SpaceComponent) {
func (db *DragonBoneShader) DrawDisplay(iDisplay IDisplay) {
children := iDisplay.GetChildren()
for _, subDisplay := range children {
db.DrawDisplay(subDisplay, sc)
db.DrawDisplay(subDisplay)
}

switch display := iDisplay.(type) {
Expand Down
34 changes: 26 additions & 8 deletions bone/Slot.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package bone
import (
wrapper "dragonBones/dragonBones"
"log"

"github.com/EngoEngine/engo"
)

type SlotInterface interface {
Expand Down Expand Up @@ -40,6 +42,7 @@ func DeleteSlot(s SlotInterface) {
type overwrittenMethodsOnSlot struct {
slot wrapper.Slot

textureScale float32
renderDisplay IDisplay
}

Expand Down Expand Up @@ -85,6 +88,7 @@ func (om *overwrittenMethodsOnSlot) X_replaceDisplay(value uintptr, isArmatureDi
case IDisplay:
display.RemoveChild(prevDisplay)
}
om.textureScale = 1.0
}

func (om *overwrittenMethodsOnSlot) X_removeDisplay() {
Expand All @@ -102,12 +106,12 @@ func (om *overwrittenMethodsOnSlot) X_updateFrame() {
if textureData.Swigcptr() == 0 || om.renderDisplay == nil {
return
}
om.textureScale = textureData.GetParent().GetScale() * om.slot.GetX_armature().GetX_armatureData().GetScale()
textureDataImpl := boneObjectLookup(textureData.Swigcptr()).(*TextureDataImpl)
switch frameDisplay := om.renderDisplay.(type) {
case *Sprite:
frameDisplay.setSpriteFrame(textureDataImpl.TextureResource)
}
log.Println("UpdateFrame:", textureData)
}

func (om *overwrittenMethodsOnSlot) X_updateMesh() {
Expand All @@ -134,20 +138,34 @@ func (om *overwrittenMethodsOnSlot) X_updateTransform() {
om.slot.UpdateGlobalTransform()

// rawDisplay := om.slot.GetRawDisplay()
transform := om.slot.GetGlobal()
// transform := om.slot.GetGlobal()
pivotX := om.slot.GetX_pivotX()
pivotY := om.slot.GetX_pivotY()
globalTransformMatrix := om.slot.GetGlobalTransformMatrix()
a, b, c, d := globalTransformMatrix.GetA(), globalTransformMatrix.GetB(), globalTransformMatrix.GetC(), globalTransformMatrix.GetD()
tx, ty := globalTransformMatrix.GetTx(), globalTransformMatrix.GetTy()

transformMatrix := engo.IdentityMatrix()

x := transform.GetX() - (globalTransformMatrix.GetA()*pivotX + globalTransformMatrix.GetC()*pivotY)
y := transform.GetY() - (globalTransformMatrix.GetB()*pivotX + globalTransformMatrix.GetD()*pivotY)
transformMatrix.Val[0] = a
transformMatrix.Val[1] = b
transformMatrix.Val[3] = c
transformMatrix.Val[4] = d

switch frameDisplay := om.renderDisplay.(type) {
case *Sprite:
frameDisplay.SpaceComponent.Position.X = x
frameDisplay.SpaceComponent.Position.Y = y
log.Println("Update Sprite Transform", frameDisplay.SpaceComponent.Position)
if om.textureScale != 1.0 {
transformMatrix.Val[0] *= om.textureScale
transformMatrix.Val[1] *= om.textureScale
transformMatrix.Val[4] *= om.textureScale
transformMatrix.Val[3] *= om.textureScale
}
transformMatrix.Val[6] = tx - (a*pivotX + c*pivotY)
transformMatrix.Val[7] = ty - (b*pivotX + d*pivotY)
frameDisplay.SetTransform(transformMatrix)
case *ArmatureDisplay:
log.Println("Update ArmatureDisplay Transform")
transformMatrix.Val[6] = tx
transformMatrix.Val[7] = ty
frameDisplay.SetTransform(transformMatrix)
}
}
4 changes: 0 additions & 4 deletions bone/Sprite.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package bone

import (
"image/color"
"log"
"unsafe"

"github.com/EngoEngine/engo"
Expand All @@ -19,8 +18,6 @@ type Texture struct {

type Sprite struct {
Display
common.RenderComponent
common.SpaceComponent

spriteFrame *common.TextureResource
}
Expand All @@ -42,7 +39,6 @@ func (sprite *Sprite) setSpriteFrame(textureData *common.TextureResource) {

sprite.RenderComponent.Drawable = (*common.Texture)(unsafe.Pointer(texture))
sprite.RenderComponent.Scale = engo.Point{X: 1, Y: 1}
log.Println("SpriteDrawable", sprite.RenderComponent.Drawable, textureData)
}

func (sprite *Sprite) Width() float32 {
Expand Down
4 changes: 2 additions & 2 deletions bone/System.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ func (d *DragonBoneSystem) New(world *ecs.World) {
}

func (d *DragonBoneSystem) Add(basic *ecs.BasicEntity, render *common.RenderComponent, space *common.SpaceComponent) {
_, ok := render.Drawable.(IDisplay)
_, ok := render.Drawable.(*ArmatureDisplay)
if !ok {
panic("Add Wrong Render To DragonBoneSystem")
}
render.SetShader(DragonBoneHUDShader)
render.SetShader(DragonBoneDefaultShader)
d.renderer.Add(basic, render, space)
}

Expand Down
Loading

0 comments on commit 81b1258

Please sign in to comment.