From 70728e4bc50a7d947d3942917f25632c830d5c48 Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Tue, 9 Jul 2024 19:35:30 +0800 Subject: [PATCH 1/8] animation support mutil channel --- config.go | 20 +- internal/anim/anim.go | 462 ++++++++++----------------------------- internal/anim/animapi.go | 119 ---------- internal/anim/channel.go | 116 ++++++++++ sprite.go | 146 +++++++++---- 5 files changed, 349 insertions(+), 514 deletions(-) delete mode 100644 internal/anim/animapi.go create mode 100644 internal/anim/channel.go diff --git a/config.go b/config.go index 45c1ea05..0ef5b76d 100644 --- a/config.go +++ b/config.go @@ -205,14 +205,18 @@ type actionConfig struct { } type aniConfig struct { - Duration float64 `json:"duration"` - Fps float64 `json:"fps"` - From interface{} `json:"from"` - To interface{} `json:"to"` - AniType aniTypeEnum `json:"anitype"` - OnStart *actionConfig `json:"onStart"` //start - OnPlay *actionConfig `json:"onPlay"` //play - IsLoop bool `json:"isLoop"` + Duration float64 `json:"duration"` + Fps float64 `json:"fps"` + From interface{} `json:"from"` + To interface{} `json:"to"` + FrameFrom string `json:"frameFrom"` + FrameTo string `json:"frameTo"` + FrameDuration float64 `json:"frameDuration"` + + AniType aniTypeEnum `json:"anitype"` + OnStart *actionConfig `json:"onStart"` //start + OnPlay *actionConfig `json:"onPlay"` //play + IsLoop bool `json:"isLoop"` //OnEnd *actionConfig `json:"onEnd"` //stop } diff --git a/internal/anim/anim.go b/internal/anim/anim.go index e54bbd8a..9f8456e9 100644 --- a/internal/anim/anim.go +++ b/internal/anim/anim.go @@ -2,23 +2,24 @@ package anim import ( "errors" - "fmt" - "log" "math" - "github.com/goplus/spx/internal/math32" "github.com/goplus/spx/internal/tools" ) +type ANIMSTATUS uint8 + +const ( + AnimstatusPlaying ANIMSTATUS = iota + AnimstatusStop +) + +type ANIMVALTYPE uint8 + const ( ANIMATIONTYPE_INT = 0 ANIMATIONTYPE_FLOAT = 1 ANIMATIONTYPE_VECTOR2 = 2 - - //Repeat the animation incrementing using key value gradients. - ANIMATIONLOOPMODE_RELATIVE = 0 - ANIMATIONLOOPMODE_CYCLE = 1 //Restart the animation from initial value - ANIMATIONLOOPMODE_CONSTANT = 2 //Pause the animation at the final value ) type IAnimatable interface { @@ -28,7 +29,7 @@ type IAnimatable interface { type IAnimation interface { GetAnimId() int64 - Animate(target IAnimationTarget, delay float64, from int, to int, loop bool, speedRatio float64) bool + Animate(delay float64, from int, to int, loop bool, speedRatio float64) bool } type IAnimationTarget interface { @@ -36,327 +37,133 @@ type IAnimationTarget interface { GetAnimatables() []IAnimatable } -type Animatable struct { - target IAnimationTarget - - FromFrame int - ToFrame int - - LoopAnimation bool - AnimationStartedDate int - - SpeedRatio float64 -} - -func NewAnimatable(target IAnimationTarget, from int, to int, loop bool, speedRatio float64) *Animatable { - - this := &Animatable{ - SpeedRatio: 1.0, - } - this.Init(target, from, to, loop, speedRatio) - return this -} - -func (this *Animatable) Init(target IAnimationTarget, from int, to int, loop bool, speedRatio float64) { - - this.target = target - this.FromFrame = from - this.ToFrame = to - this.LoopAnimation = loop - this.SpeedRatio = speedRatio - - this.AnimationStartedDate = tools.GetCurrentTimeMs() - -} - -//interface -/* -type IAnimatable interface { - GetTarget() IAnimationTarget - Animate() bool -} -*/ -func (this *Animatable) GetTarget() IAnimationTarget { - return this.target -} - -func (this *Animatable) Animate(delay float64) bool { - - // //Getting time - // var delay float64 - // delay = (float64)(tools.GetCurrentTimeMs() - this.AnimationStartedDate) - - // Animating - running := false - animations := this.target.GetAnimations() - for i := 0; i < len(animations); i++ { - animation, ok := animations[i].(IAnimation) - if ok { - isRunning := animation.Animate(this.target, delay, this.FromFrame, this.ToFrame, this.LoopAnimation, this.SpeedRatio) - running = running || isRunning - } - - } - - return running -} - -type AnimationKeyFrame struct { - Frame int - Value interface{} // Vector2 or Int or Float -} - -type Animation struct { - Name string - Id int64 +const ( + AnimValTypeInt ANIMVALTYPE = iota + AnimValTypeFloat + AnimValTypeVector2 +) - FramePerSecond float64 - DataType int - LoopMode int +type Anim struct { + Id int + Name string + fps float64 + speedRatio float64 + totalframe int + isloop bool + status ANIMSTATUS currentFrame int preFrame int preRepeatCount int //playing - playingCallback func(*Animation, int, bool, interface{}) + playingCallback func(int, bool, float64) //stop - stopCallback func(*Animation) + stopCallback func() //error - errorCallback func(*Animation, error) + errorCallback func(error) //tween easingFunction tools.IEasingFunction - - keys []*AnimationKeyFrame - offsetsCache map[string]interface{} - highLimitsCache map[string]interface{} + keys []*AnimChannel + evalValue map[string]interface{} } -var globalAnimId int64 = 1 +var globalAnimId int = 1 // loopmodel = -1 -func NewAnimation(name string, framePerSecond float64, dataType int, loopMode int) *Animation { - this := &Animation{} - this.Init(name, framePerSecond, dataType, loopMode) - return this -} - -func (this *Animation) GetAnimId() int64 { - return this.Id -} - -func (this *Animation) SetEasingFunction(easingFunc tools.IEasingFunction) { - this.easingFunction = easingFunc -} - -func (this *Animation) SetOnPlayingListener(playfuc func(*Animation, int, bool, interface{})) { - this.playingCallback = playfuc -} - -func (this *Animation) SetOnStopingListener(stopfuc func(*Animation)) { - this.stopCallback = stopfuc -} -func (this *Animation) SetOnErrorListener(errorfuc func(*Animation, error)) { - this.errorCallback = errorfuc -} +func NewAnim(name string, fps float64, totalframe int, isLoop bool) *Anim { + this := &Anim{} -func (this *Animation) Init(name string, framePerSecond float64, dataType int, loopMode int) { this.Name = name + this.fps = fps + this.totalframe = totalframe + this.isloop = isLoop + this.status = AnimstatusPlaying + + this.speedRatio = 1.0 this.Id = globalAnimId - this.FramePerSecond = framePerSecond - this.DataType = dataType this.currentFrame = math.MaxInt32 this.preFrame = math.MinInt32 this.preRepeatCount = 0 + + this.keys = make([]*AnimChannel, 0) + this.Id = globalAnimId globalAnimId++ + return this +} - if loopMode == -1 { - this.LoopMode = ANIMATIONLOOPMODE_CYCLE - } else { - this.LoopMode = loopMode - } +func (this *Anim) AddChannel(name string, dataType ANIMVALTYPE, values []*AnimationKeyFrame) { + animChan := NewAnimChannel(name, int(dataType), this.easingFunction, values) + this.keys = append(this.keys, animChan) +} - this.keys = make([]*AnimationKeyFrame, 0) +func (a *Anim) Fps() float64 { + return a.fps +} - // Cache - this.offsetsCache = map[string]interface{}{} - this.highLimitsCache = map[string]interface{}{} +func (a *Anim) Status() ANIMSTATUS { + return a.status } -func (this *Animation) SetKeys(values []*AnimationKeyFrame) { - this.keys = values - this.offsetsCache = map[string]interface{}{} - this.highLimitsCache = map[string]interface{}{} +func (a *Anim) SetLoop(isloop bool) *Anim { + a.isloop = isloop + return a } -func (this *Animation) _interpolate(currentFrame int, repeatCount int, loopMode int, offsetValue_Obj interface{}, highLimitValue_Obj interface{}) interface{} { +func (a *Anim) Play() *Anim { + a.status = AnimstatusPlaying + return a +} - if loopMode == ANIMATIONLOOPMODE_CONSTANT && repeatCount > 0 { - return highLimitValue_Obj +func (a *Anim) Stop() *Anim { + if a.status == AnimstatusStop { + return a } - for key := 0; key < len(this.keys); key++ { - if this.keys[key+1].Frame >= currentFrame { - startValue_obj := this.keys[key].Value - endValue_obj := this.keys[key+1].Value - gradient := (float64)(currentFrame-this.keys[key].Frame) / (float64)(this.keys[key+1].Frame-this.keys[key].Frame) - - //log.Printf("pregradient %g currentFrame %d, this.keys[key].Frame %d, this.keys[key+1].Frame %d ", gradient, currentFrame, this.keys[key].Frame, this.keys[key+1].Frame) - if this.easingFunction != nil { - gradient = this.easingFunction.Ease(this.easingFunction, gradient) - //log.Printf("gradient %g ", gradient) - } - - switch this.DataType { - - case ANIMATIONTYPE_INT: - startValue, ok := tools.GetInt(startValue_obj) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request int ") - return 0 - } - endValue, ok := tools.GetInt(endValue_obj) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request int ") - return 0.0 - } - - var offsetValue int - if offsetValue_Obj != nil { - offsetValue, _ = tools.GetInt(offsetValue_Obj) - } else { - offsetValue = 0.0 - } - - //log.Printf("startValue %d, endValue %d, gradient %g , val %d", startValue, endValue, gradient, startValue+int(float64(endValue-startValue)*gradient)) - - switch loopMode { - case ANIMATIONLOOPMODE_CYCLE: - return startValue + int(float64(endValue-startValue)*gradient) - case ANIMATIONLOOPMODE_CONSTANT: - return startValue + int(float64(endValue-startValue)*gradient) - case ANIMATIONLOOPMODE_RELATIVE: - return int(float64(offsetValue)*float64(repeatCount) + (float64(startValue) + float64(endValue-startValue)*gradient)) - } - - break - // Float - case ANIMATIONTYPE_FLOAT: - startValue, ok := tools.GetFloat(startValue_obj) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request int ") - return 0 - } - endValue, ok := tools.GetFloat(endValue_obj) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request int ") - return 0.0 - } - - var offsetValue float64 - if offsetValue_Obj != nil { - offsetValue, _ = tools.GetFloat(offsetValue_Obj) - } else { - offsetValue = 0.0 - } - - switch loopMode { - case ANIMATIONLOOPMODE_CYCLE: - return startValue + (endValue-startValue)*gradient - case ANIMATIONLOOPMODE_CONSTANT: - return startValue + (endValue-startValue)*gradient - case ANIMATIONLOOPMODE_RELATIVE: - return offsetValue*float64(repeatCount) + (startValue + (endValue-startValue)*gradient) - } - break - - // Vector3 - case ANIMATIONTYPE_VECTOR2: - - startValue, ok := startValue_obj.(*math32.Vector2) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request Vector2 ") - return math32.NewVector2Zero() - } - endValue, ok := endValue_obj.(*math32.Vector2) - if !ok { - log.Printf("_interpolate The interface type is incorrect, request Vector2 ") - return math32.NewVector2Zero() - } - - var offsetValue *math32.Vector2 - if offsetValue_Obj != nil { - offsetValue, _ = offsetValue_Obj.(*math32.Vector2) - } else { - offsetValue = math32.NewVector2(0, 0) - } - switch loopMode { - case ANIMATIONLOOPMODE_CYCLE: - return startValue.Lerp(endValue, gradient) - case ANIMATIONLOOPMODE_CONSTANT: - return startValue.Lerp(endValue, gradient) - case ANIMATIONLOOPMODE_RELATIVE: - return startValue.Lerp(endValue, gradient).Add(offsetValue.Scale(float64(repeatCount))) - } - default: - break - } - break - - } + a.status = AnimstatusStop + if a.stopCallback != nil { + a.stopCallback() } - - return this.keys[len(this.keys)-1].Value + return a } -//interface -/* -type IAnimation interface { - Animate(target IAnimationTarget, delay float64, from float64, to float64, loop bool, speedRatio float64) bool -} -*/ -func (this *Animation) Animate(target IAnimationTarget, delay float64, from int, to int, loop bool, speedRatio float64) bool { - if len(this.keys) == 0 { - if this.errorCallback != nil { - this.errorCallback(this, errors.New("this keys is empty")) - } +func (this *Anim) Update(delay float64) bool { + if this.status == AnimstatusStop { return false } - // Check limits - if from < this.keys[0].Frame || from > this.keys[len(this.keys)-1].Frame { - from = this.keys[0].Frame - } - if to < this.keys[0].Frame || to > this.keys[len(this.keys)-1].Frame { - to = this.keys[len(this.keys)-1].Frame + if this.totalframe == 0 { + this.onStop() + return false } - - if to == from { - if this.stopCallback != nil { - this.stopCallback(this) + if len(this.keys) == 0 { + if this.errorCallback != nil { + this.errorCallback(errors.New("this keys is empty")) } return false } - + // Animating + from := 0 + to := this.totalframe // Compute ratio rangeval := float64(to + 1 - from) - ratio := delay * float64(this.FramePerSecond*speedRatio) / 1000.0 + ratio := delay * float64(this.fps*this.speedRatio) / 1000.0 repeatCount := int(ratio/rangeval) >> 0 isReplay := repeatCount != this.preRepeatCount if isReplay { this.preRepeatCount = repeatCount } - if ratio >= rangeval && !loop { // If we are out of range and not looping get back to caller + _, progress := math.Modf(ratio / rangeval) + if ratio >= rangeval && !this.isloop { // If we are out of range and not looping get back to caller //add compete - if this.playingCallback != nil && this.preFrame != to && len(this.keys) > 1 { - this.playingCallback(this, to, isReplay, this.keys[len(this.keys)-1].Value) + this.interpolate(to) + if this.playingCallback != nil && this.preFrame != to { + this.playingCallback(to, isReplay, 1) } //stop callback - if this.stopCallback != nil { - this.stopCallback(this) - } + this.onStop() return false } @@ -364,82 +171,55 @@ func (this *Animation) Animate(target IAnimationTarget, delay float64, from int, if rangeval != 0 { this.currentFrame = from + int(ratio)%int(rangeval) } - //\\log.Printf("this.currentFrame %d, val %d, rangeval %g, delay %g, this.FramePerSecond %g, speedRatio %f ratio %g", this.currentFrame, (int(ratio) % int(rangeval)), rangeval, delay, this.FramePerSecond, speedRatio, ratio) + //\\log.Printf("this.currentFrame %d, val %d, rangeval %g, delay %g, this.fps %g, speedRatio %f ratio %g", this.currentFrame, (int(ratio) % int(rangeval)), rangeval, delay, this.fps, speedRatio, ratio) if this.currentFrame == this.preFrame { //anti not stop return true } this.preFrame = this.currentFrame + this.interpolate(this.currentFrame) - var offsetValue interface{} - var highLimitValue interface{} - if this.LoopMode != ANIMATIONLOOPMODE_CYCLE { - keyOffset := fmt.Sprintf("form[%d]to[%d]", from, to) - _, ok := this.offsetsCache[keyOffset] - if !ok { - - fromValue_obj := this._interpolate(from, 0, ANIMATIONLOOPMODE_CYCLE, nil, nil) - toValue_obj := this._interpolate(to, 0, ANIMATIONLOOPMODE_CYCLE, nil, nil) - - switch this.DataType { - // Float - case ANIMATIONTYPE_INT: - toValue, _ := toValue_obj.(int) - fromValue, _ := fromValue_obj.(int) - this.offsetsCache[keyOffset] = toValue - fromValue - break - // Float - case ANIMATIONTYPE_FLOAT: - toValue, _ := toValue_obj.(float64) - fromValue, _ := fromValue_obj.(float64) - this.offsetsCache[keyOffset] = toValue - fromValue - break - // Vector3 - case ANIMATIONTYPE_VECTOR2: - toValue, _ := toValue_obj.(*math32.Vector2) - fromValue, _ := fromValue_obj.(*math32.Vector2) - this.offsetsCache[keyOffset] = toValue.Sub(fromValue) - default: - break - } - - this.highLimitsCache[keyOffset] = toValue_obj - - } + if this.playingCallback != nil { + this.playingCallback(this.currentFrame, isReplay, progress) + } + return true +} - highLimitValue, _ = this.highLimitsCache[keyOffset] - offsetValue, _ = this.offsetsCache[keyOffset] +func (this *Anim) SetEasingFunction(easingFunc tools.IEasingFunction) { + this.easingFunction = easingFunc + for _, key := range this.keys { + key.SetEasingFunction(easingFunc) } - // Compute value +} - currentValue := this._interpolate(this.currentFrame, repeatCount, this.LoopMode, offsetValue, highLimitValue) +func (this *Anim) SetOnPlayingListener(playfuc func(int, bool, float64)) { + this.playingCallback = playfuc +} - if this.playingCallback != nil { - this.playingCallback(this, this.currentFrame, isReplay, currentValue) - } +func (this *Anim) SetOnStopingListener(stopfuc func()) { + this.stopCallback = stopfuc +} - // // Set value - // if len(this._targetPropertyPath) > 1 { - // property, err := reflections.GetField(target, this._targetPropertyPath[0]) - // if err != nil { - // log.Printf("Animate reflections.GetField %s", property) - // return false - // } - - // for index := 1; index < len(this._targetPropertyPath)-1; index++ { - // property, err = reflections.GetField(property, this._targetPropertyPath[index]) - // if err != nil { - // log.Printf("Animate reflections.GetField %s", property) - // return false - // } - // } - - // valname := this._targetPropertyPath[len(this._targetPropertyPath)-1] - // reflections.SetField(property, valname, currentValue) - // } else { - // reflections.SetField(target, this._targetProperty, currentValue) - // } +func (this *Anim) SetOnErrorListener(errorfuc func(error)) { + this.errorCallback = errorfuc +} - return true +func (this *Anim) SampleChannel(name string) interface{} { + return this.evalValue[name] +} + +func (this *Anim) onStop() { + if this.status == AnimstatusStop { + return + } + if this.stopCallback != nil { + this.stopCallback() + } +} + +func (this *Anim) interpolate(curFrame int) { + for _, key := range this.keys { + this.evalValue[key.Name] = key.interpolate(curFrame) + } } diff --git a/internal/anim/animapi.go b/internal/anim/animapi.go deleted file mode 100644 index 0c59c9cd..00000000 --- a/internal/anim/animapi.go +++ /dev/null @@ -1,119 +0,0 @@ -package anim - -type ANIMSTATUS uint8 - -const ( - AnimstatusPlaying ANIMSTATUS = iota - AnimstatusStop -) - -type ANIMVALTYPE uint8 - -const ( - AnimValTypeInt ANIMVALTYPE = iota - AnimValTypeFloat - AnimValTypeVector2 -) - -type Anim struct { - Id int - Name string - fps float64 - totalframe int - isloop bool - status ANIMSTATUS - animation *Animation - keyframelist []*AnimationKeyFrame - - //playing - playingCallback func(int, bool, interface{}) - //stop - stopCallback func() -} - -func NewAnim(name string, valtype ANIMVALTYPE, fps float64, totalframe int) *Anim { - a := &Anim{ - Name: name, - fps: fps, - totalframe: totalframe, - isloop: false, - status: AnimstatusPlaying, - animation: nil, - keyframelist: make([]*AnimationKeyFrame, 0), - } - a.animation = NewAnimation(name, fps, (int)(valtype), ANIMATIONLOOPMODE_CYCLE) - a.Id = int(a.animation.GetAnimId()) - a.animation.SetOnPlayingListener(func(an *Animation, currframe int, isReplay bool, currval interface{}) { - if a.playingCallback != nil { - a.playingCallback(currframe, isReplay, currval) - } - }) - a.animation.SetOnStopingListener(func(an *Animation) { - if a.status == AnimstatusStop { - return - } - if a.stopCallback != nil { - a.stopCallback() - } - }) - return a -} - -func (a *Anim) AddKeyFrame(frameindex int, frameval interface{}) *Anim { - a.keyframelist = append(a.keyframelist, &AnimationKeyFrame{ - Frame: frameindex, - Value: frameval, - }) - a.animation.SetKeys(a.keyframelist) - - return a -} - -func (a *Anim) Fps() float64 { - return a.fps -} - -func (a *Anim) Status() ANIMSTATUS { - return a.status -} - -func (a *Anim) SetLoop(isloop bool) *Anim { - a.isloop = isloop - return a -} - -func (a *Anim) SetOnPlayingListener(playfuc func(int, bool, interface{})) *Anim { - a.playingCallback = playfuc - return a -} - -func (a *Anim) SetOnStopingListener(stopfuc func()) *Anim { - a.stopCallback = stopfuc - return a -} - -func (a *Anim) Play() *Anim { - a.status = AnimstatusPlaying - return a -} - -func (a *Anim) Stop() *Anim { - if a.status == AnimstatusStop { - return a - } - a.status = AnimstatusStop - if a.stopCallback != nil { - a.stopCallback() - } - return a -} - -func (a *Anim) Update(delay float64) bool { - if a.status == AnimstatusStop { - return false - } - // Animating - ret := a.animation.Animate(nil, delay, 0, a.totalframe, a.isloop, 1.0) - - return ret -} diff --git a/internal/anim/channel.go b/internal/anim/channel.go new file mode 100644 index 00000000..d29e5028 --- /dev/null +++ b/internal/anim/channel.go @@ -0,0 +1,116 @@ +package anim + +import ( + "log" + + "github.com/goplus/spx/internal/math32" + "github.com/goplus/spx/internal/tools" +) + +type AnimationKeyFrame struct { + Frame int + Value interface{} // Vector2 or Int or Float +} + +type AnimChannel struct { + Name string + DataType int + //tween + easingFunction tools.IEasingFunction + keys []*AnimationKeyFrame +} + +func (this *AnimChannel) SetEasingFunction(easingFunc tools.IEasingFunction) { + this.easingFunction = easingFunc +} + +// loopmodel = -1 +func NewAnimChannel(name string, dataType int, easingFunc tools.IEasingFunction, keys []*AnimationKeyFrame) *AnimChannel { + this := &AnimChannel{} + this.Name = name + this.DataType = dataType + this.easingFunction = easingFunc + + this.keys = keys + return this +} + +func (this *AnimChannel) interpolate(currentFrame int) interface{} { + // only one key + if len(this.keys) == 1 { + return this.keys[0].Value + } + + // frame less than first key + if this.keys[0].Frame >= currentFrame { + return this.keys[0].Value + } + + // frame between two keys + for key := 0; key < len(this.keys); key++ { + if this.keys[key+1].Frame >= currentFrame { + startValue_obj := this.keys[key].Value + endValue_obj := this.keys[key+1].Value + gradient := (float64)(currentFrame-this.keys[key].Frame) / (float64)(this.keys[key+1].Frame-this.keys[key].Frame) + + //log.Printf("pregradient %g currentFrame %d, this.keys[key].Frame %d, this.keys[key+1].Frame %d ", gradient, currentFrame, this.keys[key].Frame, this.keys[key+1].Frame) + if this.easingFunction != nil { + gradient = this.easingFunction.Ease(this.easingFunction, gradient) + //log.Printf("gradient %g ", gradient) + } + + switch this.DataType { + + case ANIMATIONTYPE_INT: + startValue, ok := tools.GetInt(startValue_obj) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request int ") + return 0 + } + endValue, ok := tools.GetInt(endValue_obj) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request int ") + return 0.0 + } + + return startValue + int(float64(endValue-startValue)*gradient) + + // Float + case ANIMATIONTYPE_FLOAT: + startValue, ok := tools.GetFloat(startValue_obj) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request int ") + return 0 + } + endValue, ok := tools.GetFloat(endValue_obj) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request int ") + return 0.0 + } + + return startValue + (endValue-startValue)*gradient + + // Vector2 + case ANIMATIONTYPE_VECTOR2: + + startValue, ok := startValue_obj.(*math32.Vector2) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request Vector2 ") + return math32.NewVector2Zero() + } + endValue, ok := endValue_obj.(*math32.Vector2) + if !ok { + log.Printf("_interpolate The interface type is incorrect, request Vector2 ") + return math32.NewVector2Zero() + } + return startValue.Lerp(endValue, gradient) + default: + break + } + break + + } + } + // >= last key frame + return this.keys[len(this.keys)-1].Value +} diff --git a/sprite.go b/sprite.go index f5344182..6d756ade 100644 --- a/sprite.go +++ b/sprite.go @@ -54,6 +54,12 @@ const ( StateGlide string = "glide" StateStep string = "step" ) +const ( + AnimChannelFrame string = "@frame" + AnimChannelTurn string = "@turn" + AnimChannelGlide string = "@glide" + AnimChannelMove string = "@move" +) type Sprite struct { baseObj @@ -130,8 +136,29 @@ func (p *Sprite) init( p.animations = make(map[string]*aniConfig) for key, val := range sprite.FAnimations { var ani = val - ani.AniType = aniTypeFrame - + _, ok := p.animations[key] + if ok { + log.Panicf("animation key [%s] is exist", key) + } + oldFps := ani.Fps + if oldFps == 0 { + ani.Fps = 25 + } + switch ani.AniType { + case aniTypeFrame: + if ani.From != "" { + ani.FrameFrom = ani.From.(string) + } + if ani.To != "" { + ani.FrameTo = ani.To.(string) + } + ani.Fps = oldFps + case aniTypeMove: + case aniTypeTurn: + case aniTypeGlide: + default: + log.Panicf("unknown animation type [%s] is exist[%d]", key, ani.AniType) + } p.animations[key] = ani } @@ -515,33 +542,37 @@ func (p *Sprite) PrevCostume() { func (p *Sprite) getFromAnToForAni(anitype aniTypeEnum, from interface{}, to interface{}) (interface{}, interface{}) { if anitype == aniTypeFrame { - fromval := 0.0 - toval := 0.0 - switch v := from.(type) { - case string: - fromval = float64(p.findCostume(v)) - if fromval < 0 { - log.Panicf("findCostume %s failed", v) - } - default: - fromval, _ = tools.GetFloat(from) - } + return p.getFromAnToForAniFrames(from, to) + } - switch v := to.(type) { - case string: - toval = float64(p.findCostume(v)) - if toval < 0 { - log.Panicf("findCostume %s failed", v) - } - default: - toval, _ = tools.GetFloat(to) - } + return from, to + +} - return fromval, toval +func (p *Sprite) getFromAnToForAniFrames(from interface{}, to interface{}) (float64, float64) { + fromval := 0.0 + toval := 0.0 + switch v := from.(type) { + case string: + fromval = float64(p.findCostume(v)) + if fromval < 0 { + log.Panicf("findCostume %s failed", v) + } + default: + fromval, _ = tools.GetFloat(from) } - return from, to + switch v := to.(type) { + case string: + toval = float64(p.findCostume(v)) + if toval < 0 { + log.Panicf("findCostume %s failed", v) + } + default: + toval, _ = tools.GetFloat(to) + } + return fromval, toval } func (p *Sprite) getStateAnimName(stateName string) string { @@ -551,6 +582,10 @@ func (p *Sprite) getStateAnimName(stateName string) string { return stateName } +func lerp(a float64, b float64, progress float64) float64 { + return a + (b-a)*progress +} + func (p *Sprite) goAnimate(name string, ani *aniConfig) { if p.lastAnim != nil { p.lastAnim.Stop() @@ -564,19 +599,19 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { //anim frame fromval, toval := p.getFromAnToForAni(ani.AniType, ani.From, ani.To) - animtype := anim.AnimValTypeFloat + frameFrom, frameTo := 0.0, 0.0 + hasExtraChannel := ani.FrameFrom != "" && ani.FrameTo != "" + if hasExtraChannel { + frameFrom, frameTo = p.getFromAnToForAniFrames(ani.FrameFrom, ani.FrameTo) + } if ani.AniType == aniTypeFrame { - animtype = anim.AnimValTypeInt p.goSetCostume(ani.From) if ani.Fps == 0 { //compute fps - tovalf, _ := toval.(float64) - fromvalf, _ := fromval.(float64) + tovalf := frameFrom + fromvalf := frameTo ani.Fps = math.Abs(tovalf-fromvalf) / ani.Duration } } - if ani.AniType == aniTypeGlide { - animtype = anim.AnimValTypeVector2 - } framenum := int(ani.Duration * ani.Fps) fps := ani.Fps @@ -588,40 +623,59 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { pre_y := p.y pre_direction := p.direction //turn p.direction - an := anim.NewAnim(name, animtype, fps, framenum).AddKeyFrame(0, fromval).AddKeyFrame(framenum, toval).SetLoop(ani.IsLoop) + an := anim.NewAnim(name, fps, framenum, ani.IsLoop) + // create channels + defaultChannel := []*anim.AnimationKeyFrame{{Frame: 0, Value: fromval}, {Frame: framenum, Value: toval}} + switch ani.AniType { + case aniTypeFrame: + an.AddChannel(AnimChannelFrame, anim.AnimValTypeInt, defaultChannel) + case aniTypeMove: + an.AddChannel(AnimChannelMove, anim.AnimValTypeFloat, defaultChannel) + case aniTypeTurn: + an.AddChannel(AnimChannelTurn, anim.AnimValTypeFloat, defaultChannel) + case aniTypeGlide: + an.AddChannel(AnimChannelGlide, anim.AnimValTypeVector2, defaultChannel) + } + if hasExtraChannel && ani.AniType != aniTypeFrame { + an.AddChannel(AnimChannelFrame, anim.AnimValTypeInt, []*anim.AnimationKeyFrame{{Frame: 0, Value: frameFrom}, {Frame: framenum, Value: frameTo}}) + } + p.lastAnim = an if debugInstr { log.Printf("New anim [name %s id %d] from:%v to:%v framenum:%d fps:%f", an.Name, an.Id, fromval, toval, framenum, fps) } - an.SetOnPlayingListener(func(currframe int, isReplay bool, currval interface{}) { + an.SetOnPlayingListener(func(currframe int, isReplay bool, progress float64) { if debugInstr { - log.Printf("playing anim [name %s id %d] currframe %d, val %v", an.Name, an.Id, currframe, currval) + log.Printf("playing anim [name %s id %d] currframe %d", an.Name, an.Id, currframe) } if isReplay && ani.IsLoop { if ani.OnStart != nil && ani.OnStart.Play != "" { p.g.Play__3(ani.OnStart.Play) } } - - switch ani.AniType { - case aniTypeFrame: - val, _ := tools.GetFloat(currval) + frameValue := an.SampleChannel(AnimChannelFrame) + if frameValue != nil { + val, _ := tools.GetFloat(frameValue) p.setCostumeByIndex(int(val)) - case aniTypeMove: - val, _ := tools.GetFloat(currval) + } + moveValue := an.SampleChannel(AnimChannelMove) + if moveValue != nil { + val, _ := tools.GetFloat(moveValue) sin, cos := math.Sincos(toRadian(pre_direction)) p.doMoveToForAnim(pre_x+val*sin, pre_y+val*cos, an) - case aniTypeTurn: - val, _ := tools.GetFloat(currval) + } + turnValue := an.SampleChannel(AnimChannelTurn) + if turnValue != nil { + val, _ := tools.GetFloat(turnValue) p.setDirection(val, false) - case aniTypeGlide: - val, ok := currval.(*math32.Vector2) + } + glideValue := an.SampleChannel(AnimChannelGlide) + if glideValue != nil { + val, ok := glideValue.(*math32.Vector2) if ok { p.SetXYpos(val.X, val.Y) } - } - playaction := ani.OnPlay if playaction != nil { if ani.AniType != aniTypeFrame && playaction.Costumes != nil { From 2dc96b662ad8987f50f210f48b763fd9ba36298f Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Wed, 10 Jul 2024 16:30:50 +0800 Subject: [PATCH 2/8] support playing animation while performing actions: gliding, moving, and turning --- config.go | 14 +++++++------- internal/anim/anim.go | 1 + internal/anim/channel.go | 2 +- sprite.go | 39 +++++++++++++++++++++++++++++++++------ 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/config.go b/config.go index 0ef5b76d..39933fdc 100644 --- a/config.go +++ b/config.go @@ -205,13 +205,13 @@ type actionConfig struct { } type aniConfig struct { - Duration float64 `json:"duration"` - Fps float64 `json:"fps"` - From interface{} `json:"from"` - To interface{} `json:"to"` - FrameFrom string `json:"frameFrom"` - FrameTo string `json:"frameTo"` - FrameDuration float64 `json:"frameDuration"` + Duration float64 `json:"duration"` + Fps float64 `json:"fps"` + From interface{} `json:"from"` + To interface{} `json:"to"` + FrameFrom string `json:"frameFrom"` + FrameTo string `json:"frameTo"` + FrameFps int `json:"frameFps"` AniType aniTypeEnum `json:"anitype"` OnStart *actionConfig `json:"onStart"` //start diff --git a/internal/anim/anim.go b/internal/anim/anim.go index 9f8456e9..3193a94a 100644 --- a/internal/anim/anim.go +++ b/internal/anim/anim.go @@ -89,6 +89,7 @@ func NewAnim(name string, fps float64, totalframe int, isLoop bool) *Anim { this.preRepeatCount = 0 this.keys = make([]*AnimChannel, 0) + this.evalValue = make(map[string]interface{}, 0) this.Id = globalAnimId globalAnimId++ return this diff --git a/internal/anim/channel.go b/internal/anim/channel.go index d29e5028..b7be48d2 100644 --- a/internal/anim/channel.go +++ b/internal/anim/channel.go @@ -47,7 +47,7 @@ func (this *AnimChannel) interpolate(currentFrame int) interface{} { } // frame between two keys - for key := 0; key < len(this.keys); key++ { + for key := 0; key < len(this.keys)-1; key++ { if this.keys[key+1].Frame >= currentFrame { startValue_obj := this.keys[key].Value endValue_obj := this.keys[key+1].Value diff --git a/sprite.go b/sprite.go index 6d756ade..8038e307 100644 --- a/sprite.go +++ b/sprite.go @@ -144,6 +144,9 @@ func (p *Sprite) init( if oldFps == 0 { ani.Fps = 25 } + if ani.FrameFps == 0 { + ani.FrameFps = 25 + } switch ani.AniType { case aniTypeFrame: if ani.From != "" { @@ -153,6 +156,7 @@ func (p *Sprite) init( ani.FrameTo = ani.To.(string) } ani.Fps = oldFps + ani.FrameFps = int(oldFps) case aniTypeMove: case aniTypeTurn: case aniTypeGlide: @@ -604,6 +608,7 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { if hasExtraChannel { frameFrom, frameTo = p.getFromAnToForAniFrames(ani.FrameFrom, ani.FrameTo) } + if ani.AniType == aniTypeFrame { p.goSetCostume(ani.From) if ani.Fps == 0 { //compute fps @@ -616,9 +621,6 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { framenum := int(ani.Duration * ani.Fps) fps := ani.Fps - //frame - //pre_index := p.getCostumeIndex() - //xy pos pre_x := p.x pre_y := p.y pre_direction := p.direction //turn p.direction @@ -637,7 +639,32 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { an.AddChannel(AnimChannelGlide, anim.AnimValTypeVector2, defaultChannel) } if hasExtraChannel && ani.AniType != aniTypeFrame { - an.AddChannel(AnimChannelFrame, anim.AnimValTypeInt, []*anim.AnimationKeyFrame{{Frame: 0, Value: frameFrom}, {Frame: framenum, Value: frameTo}}) + iFrameFrom := int(math.Round(frameFrom)) + iFrameTo := int(math.Round(frameTo)) + frameCount := iFrameTo - iFrameFrom + 1 + framePerIter := int(float64(frameCount) * ani.Fps / float64(ani.FrameFps)) + iterCount := int(framenum / framePerIter) + is_need_ext := framenum != iterCount*int(ani.FrameFps) + arySize := iterCount * 2 + if is_need_ext { + arySize += 2 + } + keyFrames := make([]*anim.AnimationKeyFrame, arySize) + i := 0 + for ; i < iterCount; i++ { + offset := framePerIter * i + keyFrames[i*2+0] = &anim.AnimationKeyFrame{Frame: offset + 0, Value: iFrameFrom} + keyFrames[i*2+1] = &anim.AnimationKeyFrame{Frame: offset + framePerIter - 1, Value: iFrameTo} + } + if is_need_ext { + offset := framePerIter * i + finalFrame := frameCount - offset + lastDuration := float64((framenum - offset)) / float64(framePerIter) + finalIFrame := int(lastDuration * float64(frameCount)) + keyFrames[i*2+0] = &anim.AnimationKeyFrame{Frame: offset + 0, Value: iFrameFrom} + keyFrames[i*2+1] = &anim.AnimationKeyFrame{Frame: offset + finalFrame - 1, Value: iFrameFrom + finalIFrame} + } + an.AddChannel(AnimChannelFrame, anim.AnimValTypeInt, keyFrames) } p.lastAnim = an @@ -667,13 +694,13 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { turnValue := an.SampleChannel(AnimChannelTurn) if turnValue != nil { val, _ := tools.GetFloat(turnValue) - p.setDirection(val, false) + p.setDirection(pre_direction+val, false) } glideValue := an.SampleChannel(AnimChannelGlide) if glideValue != nil { val, ok := glideValue.(*math32.Vector2) if ok { - p.SetXYpos(val.X, val.Y) + p.SetXYpos(pre_x+val.X, pre_y+val.Y) } } playaction := ani.OnPlay From 1538a94ef16442712c79ebed3b71727a1322a263 Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Wed, 10 Jul 2024 16:34:50 +0800 Subject: [PATCH 3/8] just apply the animation result; there's no need to add the start value. --- sprite.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sprite.go b/sprite.go index 8038e307..ed595fce 100644 --- a/sprite.go +++ b/sprite.go @@ -694,13 +694,13 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { turnValue := an.SampleChannel(AnimChannelTurn) if turnValue != nil { val, _ := tools.GetFloat(turnValue) - p.setDirection(pre_direction+val, false) + p.setDirection(val, false) } glideValue := an.SampleChannel(AnimChannelGlide) if glideValue != nil { val, ok := glideValue.(*math32.Vector2) if ok { - p.SetXYpos(pre_x+val.X, pre_y+val.Y) + p.SetXYpos(val.X, val.Y) } } playaction := ani.OnPlay From cc2b0ed710004c76f4b5545f420cdcf91a609dd6 Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Wed, 10 Jul 2024 17:20:57 +0800 Subject: [PATCH 4/8] fixed turnTo (left|right) bug --- spgdi.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/spgdi.go b/spgdi.go index 23f7bb2a..cb5b970c 100644 --- a/spgdi.go +++ b/spgdi.go @@ -154,10 +154,17 @@ func (p *spriteDrawInfo) updateMatrix() { if p.sprite.rotationStyle == Normal { geo.Rotate(toRadian(direction)) } else if p.sprite.rotationStyle == LeftRight { - if math.Abs(p.sprite.direction) > 155 && math.Abs(p.sprite.direction) < 205 { - geo.Scale(-1, 1) + dirDeg := p.sprite.direction + // convert to 0 ~ 360 + dirDeg = math.Mod(dirDeg, 360.0) + if dirDeg < 0 { + dirDeg += 360 } - if math.Abs(p.sprite.direction) > 0 && math.Abs(p.sprite.direction) < 25 { + // convert to -180 ~ 180 + if dirDeg > 180 { + dirDeg -= 360 + } + if dirDeg < -45 || dirDeg > 135 { geo.Scale(-1, 1) } } From f57e13a18be845e1eb6e4e4eec27654d6902eafe Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Wed, 10 Jul 2024 17:21:57 +0800 Subject: [PATCH 5/8] fixed extra animation custome index error --- sprite.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sprite.go b/sprite.go index ed595fce..2fc0e51a 100644 --- a/sprite.go +++ b/sprite.go @@ -658,8 +658,8 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { } if is_need_ext { offset := framePerIter * i - finalFrame := frameCount - offset - lastDuration := float64((framenum - offset)) / float64(framePerIter) + finalFrame := framenum - offset + lastDuration := float64(finalFrame) / float64(framePerIter) finalIFrame := int(lastDuration * float64(frameCount)) keyFrames[i*2+0] = &anim.AnimationKeyFrame{Frame: offset + 0, Value: iFrameFrom} keyFrames[i*2+1] = &anim.AnimationKeyFrame{Frame: offset + finalFrame - 1, Value: iFrameFrom + finalIFrame} From 885578c3003acc0f509cb80a752abd5d17cadd19 Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Thu, 11 Jul 2024 17:48:47 +0800 Subject: [PATCH 6/8] fix: Unexpected behavior of RotationStyle heading: [0, 180] is considered facing right heading: (-180, 0) is considered facing left --- spgdi.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spgdi.go b/spgdi.go index cb5b970c..6eae5f10 100644 --- a/spgdi.go +++ b/spgdi.go @@ -164,7 +164,7 @@ func (p *spriteDrawInfo) updateMatrix() { if dirDeg > 180 { dirDeg -= 360 } - if dirDeg < -45 || dirDeg > 135 { + if dirDeg < 0 { geo.Scale(-1, 1) } } From 1151aba783c8a82530db85c44d1a20d460f9b1cb Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Fri, 12 Jul 2024 14:02:29 +0800 Subject: [PATCH 7/8] auto set animation.aniType when calling step turnto --- sprite.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sprite.go b/sprite.go index 2fc0e51a..159394a5 100644 --- a/sprite.go +++ b/sprite.go @@ -862,6 +862,7 @@ func (p *Sprite) Step__2(step float64, animname string) { anicopy := *ani anicopy.From = 0 anicopy.To = step + anicopy.AniType = aniTypeMove anicopy.Duration = math.Abs(step) * ani.Duration p.goAnimate(animname, &anicopy) return @@ -1046,6 +1047,7 @@ func (p *Sprite) TurnTo(obj interface{}) { anicopy.From = fromangle anicopy.To = toangle anicopy.Duration = ani.Duration / 360.0 * math.Abs(delta) + anicopy.AniType = aniTypeTurn p.goAnimate(animName, &anicopy) return } From acd4058466e2545e5dbd8122251e9a60777cbccb Mon Sep 17 00:00:00 2001 From: jiepengtan Date: Fri, 12 Jul 2024 16:02:03 +0800 Subject: [PATCH 8/8] fix: 1. the default animation's state should always be set to 'loop'. 2. when any other animation (excluding 'die') stops, the default animation should commence. --- sprite.go | 35 ++- tutorial/07-Camera/1.jpg | Bin 0 -> 7506 bytes tutorial/07-Camera/Bullet.spx | 11 + tutorial/07-Camera/MyAircraft.spx | 17 ++ tutorial/07-Camera/assets/1.png | Bin 0 -> 12663 bytes tutorial/07-Camera/assets/index.json | 15 ++ .../07-Camera/assets/sprites/Bullet/30.png | Bin 0 -> 803 bytes .../assets/sprites/Bullet/index.json | 20 ++ .../07-Camera/assets/sprites/MyAircraft/8.png | Bin 0 -> 14074 bytes .../assets/sprites/MyAircraft/index.json | 19 ++ tutorial/07-Camera/main.spx | 4 + tutorial/09-LoopAnim/Bullet.spx | 0 tutorial/09-LoopAnim/SmallEnemy.spx | 6 + tutorial/09-LoopAnim/assets/1.png | Bin 0 -> 12663 bytes tutorial/09-LoopAnim/assets/index.json | 13 + .../09-LoopAnim/assets/sounds/explode/1.wav | Bin 0 -> 9276 bytes .../assets/sounds/explode/index.json | 3 + .../09-LoopAnim/assets/sprites/Bullet/30.png | Bin 0 -> 803 bytes .../assets/sprites/Bullet/index.json | 20 ++ .../assets/sprites/SmallEnemy/32.png | Bin 0 -> 3441 bytes .../assets/sprites/SmallEnemy/33.png | Bin 0 -> 3959 bytes .../assets/sprites/SmallEnemy/34.png | Bin 0 -> 4388 bytes .../assets/sprites/SmallEnemy/35.png | Bin 0 -> 5980 bytes .../assets/sprites/SmallEnemy/36.png | Bin 0 -> 1981 bytes .../assets/sprites/SmallEnemy/index.json | 56 +++++ tutorial/09-LoopAnim/main.spx | 4 + tutorial/10-PivotPoint/Calf.spx | 27 +++ tutorial/10-PivotPoint/assets/index.json | 9 + .../10-PivotPoint/assets/sprites/Calf/1.png | Bin 0 -> 24443 bytes .../assets/sprites/Calf/index.json | 23 ++ tutorial/11_MutilScene/Bullet.spx | 22 ++ tutorial/11_MutilScene/MyAircraft.spx | 20 ++ tutorial/11_MutilScene/SmallEnemy.spx | 31 +++ tutorial/11_MutilScene/assets/1.png | Bin 0 -> 12663 bytes tutorial/11_MutilScene/assets/2.png | Bin 0 -> 21111 bytes .../11_MutilScene/assets/scenes/scene1.json | 13 + .../11_MutilScene/assets/scenes/scene2.json | 15 ++ tutorial/11_MutilScene/assets/setting.json | 7 + .../11_MutilScene/assets/sounds/explode/1.wav | Bin 0 -> 9276 bytes .../assets/sounds/explode/index.json | 3 + .../assets/sprites/Bullet/30.png | Bin 0 -> 803 bytes .../assets/sprites/Bullet/index.json | 20 ++ .../assets/sprites/MyAircraft/8.png | Bin 0 -> 14074 bytes .../assets/sprites/MyAircraft/index.json | 19 ++ .../assets/sprites/SmallEnemy/32.png | Bin 0 -> 3441 bytes .../assets/sprites/SmallEnemy/33.png | Bin 0 -> 3959 bytes .../assets/sprites/SmallEnemy/34.png | Bin 0 -> 4388 bytes .../assets/sprites/SmallEnemy/35.png | Bin 0 -> 5980 bytes .../assets/sprites/SmallEnemy/36.png | Bin 0 -> 1981 bytes .../assets/sprites/SmallEnemy/index.json | 57 +++++ tutorial/11_MutilScene/main.spx | 3 + tutorial/12-AnimBinding/Bullet.spx | 4 + tutorial/12-AnimBinding/SmallEnemy.spx | 14 ++ tutorial/12-AnimBinding/assets/1.png | Bin 0 -> 12663 bytes tutorial/12-AnimBinding/assets/index.json | 12 + .../assets/sounds/explode/1.wav | Bin 0 -> 9276 bytes .../assets/sounds/explode/index.json | 3 + .../assets/sprites/Bullet/30.png | Bin 0 -> 803 bytes .../assets/sprites/Bullet/index.json | 20 ++ .../assets/sprites/SmallEnemy/32.png | Bin 0 -> 3441 bytes .../assets/sprites/SmallEnemy/33.png | Bin 0 -> 3959 bytes .../assets/sprites/SmallEnemy/34.png | Bin 0 -> 4388 bytes .../assets/sprites/SmallEnemy/35.png | Bin 0 -> 5980 bytes .../assets/sprites/SmallEnemy/36.png | Bin 0 -> 1981 bytes .../assets/sprites/SmallEnemy/index.json | 93 +++++++ tutorial/12-AnimBinding/main.spx | 3 + tutorial/bug_anim.zip | Bin 0 -> 46631 bytes tutorial/bug_anim/Fighter.spx | 23 ++ tutorial/bug_anim/assets/backdrop.png | Bin 0 -> 1264 bytes tutorial/bug_anim/assets/index.json | 25 ++ .../Fighter/__animation_default_idle-1.png | Bin 0 -> 2034 bytes .../Fighter/__animation_default_idle-2.png | Bin 0 -> 2078 bytes .../Fighter/__animation_default_idle-3.png | Bin 0 -> 2107 bytes .../Fighter/__animation_default_idle-4.png | Bin 0 -> 2110 bytes .../Fighter/__animation_default_idle-5.png | Bin 0 -> 2087 bytes .../Fighter/__animation_default_idle-6.png | Bin 0 -> 2033 bytes .../Fighter/__animation_dying_dead-1.png | Bin 0 -> 1598 bytes .../Fighter/__animation_dying_dead-2.png | Bin 0 -> 1439 bytes .../Fighter/__animation_dying_dead-3.png | Bin 0 -> 1147 bytes .../Fighter/__animation_fight_attack_1-1.png | Bin 0 -> 2077 bytes .../Fighter/__animation_fight_attack_1-2.png | Bin 0 -> 1998 bytes .../Fighter/__animation_fight_attack_1-3.png | Bin 0 -> 1936 bytes .../Fighter/__animation_fight_attack_1-4.png | Bin 0 -> 1899 bytes .../Fighter/__animation_walk_walk-1.png | Bin 0 -> 1692 bytes .../Fighter/__animation_walk_walk-2.png | Bin 0 -> 1783 bytes .../Fighter/__animation_walk_walk-3.png | Bin 0 -> 1848 bytes .../Fighter/__animation_walk_walk-4.png | Bin 0 -> 1818 bytes .../Fighter/__animation_walk_walk-5.png | Bin 0 -> 1682 bytes .../Fighter/__animation_walk_walk-6.png | Bin 0 -> 1785 bytes .../Fighter/__animation_walk_walk-7.png | Bin 0 -> 1792 bytes .../Fighter/__animation_walk_walk-8.png | Bin 0 -> 1773 bytes .../assets/sprites/Fighter/default.png | Bin 0 -> 2077 bytes .../assets/sprites/Fighter/index.json | 226 ++++++++++++++++++ tutorial/bug_anim/main.spx | 0 tutorial/center-pivot.zip | Bin 0 -> 20982 bytes tutorial/center-pivot/Body.spx | 4 + tutorial/center-pivot/assets/backdrop.png | Bin 0 -> 1264 bytes tutorial/center-pivot/assets/index.json | 1 + .../assets/sprites/Body/body.jpeg | Bin 0 -> 12072 bytes .../center-pivot/assets/sprites/Body/cat.jpeg | Bin 0 -> 5877 bytes .../assets/sprites/Body/index.json | 1 + tutorial/center-pivot/main.spx | 0 tutorial/index.json | 219 +++++++++++++++++ 103 files changed, 1133 insertions(+), 7 deletions(-) create mode 100644 tutorial/07-Camera/1.jpg create mode 100644 tutorial/07-Camera/Bullet.spx create mode 100644 tutorial/07-Camera/MyAircraft.spx create mode 100644 tutorial/07-Camera/assets/1.png create mode 100644 tutorial/07-Camera/assets/index.json create mode 100644 tutorial/07-Camera/assets/sprites/Bullet/30.png create mode 100644 tutorial/07-Camera/assets/sprites/Bullet/index.json create mode 100644 tutorial/07-Camera/assets/sprites/MyAircraft/8.png create mode 100644 tutorial/07-Camera/assets/sprites/MyAircraft/index.json create mode 100644 tutorial/07-Camera/main.spx create mode 100644 tutorial/09-LoopAnim/Bullet.spx create mode 100644 tutorial/09-LoopAnim/SmallEnemy.spx create mode 100644 tutorial/09-LoopAnim/assets/1.png create mode 100644 tutorial/09-LoopAnim/assets/index.json create mode 100644 tutorial/09-LoopAnim/assets/sounds/explode/1.wav create mode 100644 tutorial/09-LoopAnim/assets/sounds/explode/index.json create mode 100644 tutorial/09-LoopAnim/assets/sprites/Bullet/30.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/Bullet/index.json create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/32.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/33.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/34.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/35.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/36.png create mode 100644 tutorial/09-LoopAnim/assets/sprites/SmallEnemy/index.json create mode 100644 tutorial/09-LoopAnim/main.spx create mode 100644 tutorial/10-PivotPoint/Calf.spx create mode 100644 tutorial/10-PivotPoint/assets/index.json create mode 100644 tutorial/10-PivotPoint/assets/sprites/Calf/1.png create mode 100644 tutorial/10-PivotPoint/assets/sprites/Calf/index.json create mode 100644 tutorial/11_MutilScene/Bullet.spx create mode 100644 tutorial/11_MutilScene/MyAircraft.spx create mode 100644 tutorial/11_MutilScene/SmallEnemy.spx create mode 100644 tutorial/11_MutilScene/assets/1.png create mode 100644 tutorial/11_MutilScene/assets/2.png create mode 100644 tutorial/11_MutilScene/assets/scenes/scene1.json create mode 100644 tutorial/11_MutilScene/assets/scenes/scene2.json create mode 100644 tutorial/11_MutilScene/assets/setting.json create mode 100644 tutorial/11_MutilScene/assets/sounds/explode/1.wav create mode 100644 tutorial/11_MutilScene/assets/sounds/explode/index.json create mode 100644 tutorial/11_MutilScene/assets/sprites/Bullet/30.png create mode 100644 tutorial/11_MutilScene/assets/sprites/Bullet/index.json create mode 100644 tutorial/11_MutilScene/assets/sprites/MyAircraft/8.png create mode 100644 tutorial/11_MutilScene/assets/sprites/MyAircraft/index.json create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/32.png create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/33.png create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/34.png create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/35.png create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/36.png create mode 100644 tutorial/11_MutilScene/assets/sprites/SmallEnemy/index.json create mode 100644 tutorial/11_MutilScene/main.spx create mode 100644 tutorial/12-AnimBinding/Bullet.spx create mode 100644 tutorial/12-AnimBinding/SmallEnemy.spx create mode 100644 tutorial/12-AnimBinding/assets/1.png create mode 100644 tutorial/12-AnimBinding/assets/index.json create mode 100644 tutorial/12-AnimBinding/assets/sounds/explode/1.wav create mode 100644 tutorial/12-AnimBinding/assets/sounds/explode/index.json create mode 100644 tutorial/12-AnimBinding/assets/sprites/Bullet/30.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/Bullet/index.json create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/32.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/33.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/34.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/35.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/36.png create mode 100644 tutorial/12-AnimBinding/assets/sprites/SmallEnemy/index.json create mode 100644 tutorial/12-AnimBinding/main.spx create mode 100644 tutorial/bug_anim.zip create mode 100644 tutorial/bug_anim/Fighter.spx create mode 100644 tutorial/bug_anim/assets/backdrop.png create mode 100644 tutorial/bug_anim/assets/index.json create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-1.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-2.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-3.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-4.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-5.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-6.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_dying_dead-1.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_dying_dead-2.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_dying_dead-3.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-1.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-2.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-3.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-4.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-1.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-2.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-3.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-4.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-5.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-6.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-7.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-8.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/default.png create mode 100644 tutorial/bug_anim/assets/sprites/Fighter/index.json create mode 100644 tutorial/bug_anim/main.spx create mode 100644 tutorial/center-pivot.zip create mode 100644 tutorial/center-pivot/Body.spx create mode 100644 tutorial/center-pivot/assets/backdrop.png create mode 100644 tutorial/center-pivot/assets/index.json create mode 100644 tutorial/center-pivot/assets/sprites/Body/body.jpeg create mode 100644 tutorial/center-pivot/assets/sprites/Body/cat.jpeg create mode 100644 tutorial/center-pivot/assets/sprites/Body/index.json create mode 100644 tutorial/center-pivot/main.spx create mode 100644 tutorial/index.json diff --git a/sprite.go b/sprite.go index 159394a5..18327021 100644 --- a/sprite.go +++ b/sprite.go @@ -97,8 +97,9 @@ type Sprite struct { hasOnCloned bool hasOnTouched bool - gamer reflect.Value - lastAnim *anim.Anim + gamer reflect.Value + lastAnim *anim.Anim + isWaitingStopAnim bool } func (p *Sprite) SetDying() { // dying: visible but can't be touched @@ -193,12 +194,9 @@ func (p *Sprite) init( } } func (p *Sprite) awake() { - if p.defaultAnimation != "" { - if p.isVisible { - p.Animate(p.defaultAnimation) - } - } + p.playDefaultAnim() } + func (p *Sprite) InitFrom(src *Sprite) { p.baseObj.initFrom(&src.baseObj) p.eventSinks.initFrom(&src.eventSinks, p) @@ -592,7 +590,9 @@ func lerp(a float64, b float64, progress float64) float64 { func (p *Sprite) goAnimate(name string, ani *aniConfig) { if p.lastAnim != nil { + p.isWaitingStopAnim = true p.lastAnim.Stop() + p.isWaitingStopAnim = false } var animwg sync.WaitGroup animwg.Add(1) @@ -715,12 +715,19 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { } } }) + isNeedPlayDefault := false an.SetOnStopingListener(func() { if debugInstr { log.Printf("stop anim [name %s id %d] ", an.Name, an.Id) } animwg.Done() p.lastAnim = nil + if !p.isWaitingStopAnim && name != p.defaultAnimation && p.isVisible { + dieAnimName := p.getStateAnimName(StateDie) + if name != dieAnimName { + isNeedPlayDefault = true + } + } }) var h *tickHandler @@ -731,6 +738,9 @@ func (p *Sprite) goAnimate(name string, ani *aniConfig) { } }) waitToDo(animwg.Wait) + if isNeedPlayDefault { + p.playDefaultAnim() + } } func (p *Sprite) Animate(name string) { @@ -870,6 +880,17 @@ func (p *Sprite) Step__2(step float64, animname string) { p.goMoveForward(step) } +func (p *Sprite) playDefaultAnim() { + animName := p.defaultAnimation + if animName != "" && p.isVisible { + if ani, ok := p.animations[animName]; ok { + anicopy := *ani + anicopy.IsLoop = true + p.goAnimate(animName, &anicopy) + } + } +} + // Goto func: // // Goto(sprite) diff --git a/tutorial/07-Camera/1.jpg b/tutorial/07-Camera/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87bbd0f2750ce3b9de97dc8b040388aa387ff44a GIT binary patch literal 7506 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 pjvtct#rzx!{hEc6;Eo { + setXYpos MyAircraft.xpos, MyAircraft.ypos+5 + show + for { + wait 0.04 + step 10 + if touching(Edge) { + destroy + } + } +} diff --git a/tutorial/07-Camera/MyAircraft.spx b/tutorial/07-Camera/MyAircraft.spx new file mode 100644 index 00000000..7426df9d --- /dev/null +++ b/tutorial/07-Camera/MyAircraft.spx @@ -0,0 +1,17 @@ +import "math" +onStart => { + setXYpos 0, 0 + for { + wait 0.1 + Bullet.clone + } +} + +onStart => { + setXYpos 0, 0 + Camera.setXYpos 0, 0 + for { + wait 0.03 + setXYpos mouseX, mouseY + } +} \ No newline at end of file diff --git a/tutorial/07-Camera/assets/1.png b/tutorial/07-Camera/assets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e6e964c1c5014e7ab35a96ff5d6848064a374b GIT binary patch literal 12663 zcmb8W4LH;L|39uy>Z3Y2AKi%DoN8_&WD=XZqgxw|k}Wkv{8dKAunU zZirJqZr0qaq@?sC%<1@9C8c$#N=oZL{AVNZP1VRBr<9b;m0`yn&qaQo81TehghlIr z*;hT4{iN)ib40aWu1cSU`uy_hpNvd~E}s6m<6d~OnnZa6ONE+Z# z87dhnp6}IL*u9>0j<4Roce2c-P|opIR*07E9M00DlA9aw&@-&TI=Z?j-s{(nmM{Az z0{VLgC#6fE)cY2dmE46W-$$AT`uZioQBe%dqQ^yqp0&9N%gws0pU7^|9E4?JBG>2Z zC>w6MGBZ}rjSP+aM7GYt88Dg5IoYXGwCV3p>SY3fpC!GN-fea%Y8gr6GgW}azjW+O zod9pDNQNX%PY0kcTqtQ`6&FWSO82Zbw+yWcwotRjq}7a)YxHSJSEh~UD3Q|I=41pM zTS=9Xr={(2@xJW){6u!ZxK;#v=pzoaWy`&}IBZz=o3CFZwzE#NjGoT9QcHrLfeJxs zr8+;zm$X+;ohT~{&@#cP-E+-7=PNiUP~TOf_UeW~iZ_feTZ-UTSD?#{vTw9D$|ZPH zcME)}8nMrysEC_^nCq$#A_eFFD8$*}tYIKs2V!Z{Y-4Nho~`n!z135r13@xf##bK` z?a^Kwt(bA|`weG*nOMjf6Uv5_l z&UUfrZ~4KJ`T3IIlF)vC*QetbD0j_!{O6FllFwbhF6x?ACRJm8~-<9Ab4o&t-F9Sf&VNE8FYdUZyKnx!tL_J?o6M^TU}nnS^8P==H{Zy>Ak%z zVfDf&+1%V%z_KXaCq}Xk(7mlU99if_Z^(h^#+LL5X^eLoXH{ArTh`QA!3-vKVPCXp z!Rx(+MRGme>g&iNMuu zR&1m47cX8o+YM%SCa>^lC~k(u(A4MSo?P;~4S9J=uMVlFHWn5Jv}7o9v?4Om$v?8Lu?>#1OiWEIzS~-T&UzVHKSK`EPJ- zzkNLBJn0uT?#xWZl>IM`>u%+n8G4e#&LXe2&5A%A#sS#RyabTNb=(fvIkTyST6M(^ zus>y5z;s~^cY}K^ctIDXr@<26Fm?HX2!@94{C7=NK||+!p+X$i;rd3qJ@vgEs{JcA z8#MYR!Yu{b$s$p-`uEwmz4=Occ`;<;g<@9mZ}jCLyX4dY^Ru}qHMrn-7H)rAT@8BO z>xnwt(<H&<=5l4@n%$nm$Ty7uRI*CFb9_$bRI zglYCAQ+z|{SF`zV?>W4{R0(Evw#b2Rfn1fP$I7VnV_*IlguF+;2h3*ZG{`P?Z(77j zf%6sCZlO&S=-KRo9f|9k`4)B?a+T8c+--0;;|53rP%{goc}gqeb|zxJvK7OclwnUW1H_(u!^G8p~hjvdMfqA`=#nzP)}utJ*xSNkmzKG;J` zQhr%v;Lj3u`#+9;5ZnE*H2xvjKCaW>?9IaW6#^>6(}7pZ%mayCpAa4SDv0fhM@&Nr?CT`WT!>wbeg5#?Q}7^0|#GaZ`lPwpA|&uJ|+!C#~!LMUon?jpb!1&BbV>wa2g2%Y`OlKKwH-5<=CcnT7`(ya~> zi~yC~%pR&4*E$)#B{0hvXMWn1YA5#k!3t!9*3#zsBCq+iTWIq|ebqEEEDOKo$dX&& z1rn()u_t*9xZ4U^uwmKIrc;&py;$-8z?b8N&E2U+< zu|;`GKj$l<-+A}i)uO=hmj~XC(hJP=bLK?NErYkkRklSB^8jO3l3awouFPuDiA+y9 zo(_3DTMS?T;871gA6`&hHgH?F22{%&J#|JN^lvR4AQ%XRnf)ok9J_U~;^iXTJf1cd zZe?kZDo&qStdyXj0wJ4WlKH5ntge2?4y7GCz7X|OD7Dq0jfs=!-*m|Xag|F!2xKcc zDzM52alLIqI-xcgvmDbOs7tE0^DGuMM`y>>iK=d5a`V3om_yPDe*mA*m{I zC!qXgBPbY?_%looH3B=-*5@-P{xNuC=}PuWZj3ByP{hn+4BK`6Eg5TSOZDTrGVrNn z#F8zM-ij;CHJ%MkbNDDmR>Xb!`t?c=RX8U%`<}5v#dWH&hxGp#YdEUAILRBDoooPN zxuM}Jy9A@EnX45NWcwD46^{!*Fa*BT-jI4xYTMg4_7ESFuej+X{H4g zYng0-o!hi&lNXEsSdAUE@1TL@%Ro_>`#i5>jFug_+EURCNY$B@IEe zw^=wlclWuT?7F5b18485+Cldp+C2`))$|qb`y5)tL<t?J(O=@lAcbVN`k15g+42Qcg9nX zKT+IijDzP#f_@G-J;W=JdB+~Nv&}xE@AHokTJ?-AcoM#5jSq~av%VPh!D;8olQBI$ zr=-3!%R$EZAQ3;RmLPtN(06tQt{qU)SKyupTyLTFR6@Jta=I5ONb0iS*p`;Fslr!| z`vK>XSx~`XcqRav@x-frIwNbcMtguXUQuIg)^(a%x#kp9FSeU3);>FvK$C;r`DJ!V zxnQ*T?c2BL64YB5Z+ubU?d?-Oa*A%b2s(gyaRK^Ceb+A2&{apOD=wX1Yg${!@V!6(_4%Cx%5{sHP}yW9$umph<#v> z3MQywjQ8S2kr&LE#$8h{W~%XWkt@}MCygG60M6?uX|FNq>+AF4Fi}U@{q2`~w;YVu z^AQqyZ+I$vm`+h^JSK3j_SZg`(Y<@erfqTc&J7j<)%h_<3LeA|6RzGoZA zxE)*Z5@|s0JToL3(IQXV5Qs7o47%XzTv1cbIlvf*_j+*$nIPfxOjHGQB40)n_i5gW^KzSS(O`8IR?gDrCA!Fo@VaJBcQ=yp z)l>WseJ9kAN_F&}{d^~WI1Q5G$g#Vc>r1M8i)e|AA%+tOOe77I6Y`QkbmjBZ&3pju z_tF3RHN;^D7QCpx94Vd2{f_8un|hyMmvxAbVwJb%DH>lAW}HW^dx6}b9r)~1xa zO~`}>{UCSSse59tNL@EZ6Vgz~+TA^0zCA(w?Ck8!{Y2T$3V16zxt?W|CkOT11t3ux zycZ8hYx8FGS+%B5-}ul1i)M*Dr}$*bY(`{s0g(-W`y0D$-`c?T6AbFwpE((XfjSCY z^^!Izy!fH&+2n(Q@oCcG=(hX<9FaDTWL{_=_|sL_A)G+DYw=CzED*wP-G1YH#Kz{L z0f_{fXHRxBZEV8c7~+h2Y1fLD7vZ8M7zq}_qO`W?#+Eiwc2{43P8NZ70*7&P%PSfn zIpwC-F#+Q$2nk1)&qEDqFGB`haEaLGAW9*h5A97&qT1n+2~$ILv?i2;Y~;i##kQm0 zYrzG-fSZ%;I=5|`AA4usDfI)#r!++!h^htc6c#8pHe+3Qr*G%&C(KBr z3o=xG%$}vMg2gi@ah^`pEkG2@%j-90s0HfZC&nKGGbsKXD#{l+ggfdh4r@g_F)1HE zO<`K=1_owS-Brc>kuyNz{EH*QM>-MMXZ)L!embt+h}N|@IRWKQRqmNS1DOIzI1Lxo z1b#4Eht-*T>T-a-BXyJ0dd6^1)&1VL*ACKN!uP?}_YMxyw>x__a>uP$tfb!Gt>ZT; zo0 zx4yf8)U2zaF+H$BA-%1?hK4@ZbVVTOdikJCEghY3Jzd2 zG6&M!fM5m);~p{Jw`Zvkar$&vf_w!9mXLn}7x&L|Q+ph~Rq+*iaC$n}GBGL1r-g@2 z=Z!}nEM9v_hNbgr=2zfgR^$NwuXT!9RC~iXH!$s>{c_GlzWINif7kfmms#VZ);|Ad z=>NW>|GUxuY#unpt2P@On=xr52J`OTdc`jKlMzMk2}?^$-0JG;Zzt9P(pOdv^b{Zv zuCBD;%a>pOJMPh=M**!RrZlGFwtll&{zHq_peKP(wOv(@ja09nLX8ERO)Xt@F;v^YzIi_1c@TvC7q8Pn)5 zk66*BM@9-XsikEDqv8w-Wn5}at4E@!=XedPeXC_nu`5%nk2LXZ!)w|u@GmlP7dse6OC*csO7aGf=>P(ApT)+IXUTX~F_-#Ulc_U&z)Dt7^3pH{2a22VW) zxXGB872ppODI36viHYF}Jtov5#>L>SnVAsF`dA5Fv#P2Jeml6yR-v6+8}3x#rz*F! zTVmR=bFhJDx$V;NXLG8na}6H6u(FD*tgMozfq|Ug0#}z$5WL~@E7Itr1s*<%w7n1ox&#G95P5v)*S@}cQAe*pUL(jsH>~TEsZ^|*`n|; zf1H<|oL8MU3tJt?snNwmy=s>-SD-mbYchR%5VyrQeY_BM^IMAt6VGeB=(E^78E3)NWwu@3zc&&v#6<1WQLLd5h({A_O`Ygb$fdma%MGobF0TIMo+_J;lpWnYJ2)toQ&o$c^kk z%!e*Gc;P?Kg)PsS#TGZ|`qY)AoGIezX5x*7s{q0VQun+(TeUJ|j#DDLq}b8sOM~|T zf=l=w{1>G~uH5SLNRK&yDJ9kuRjrxZgVK%ZtvUA-ye2O`aTmA#d$LtIuy$k8}x|QNGv%HNh zZrA$ItU5PZ?yxKyS~|565T^3)cmtejX4m`CCm_-oG{r6{9Rsk$4h`4Wv(YT->T*#) zs}We3cc^tnMveH-W42`a-Ts^<1w3CcVs45Z{Paz_0344CuDnc{{M2zKwJ=om}mdz{`g(0}=2&~LV$G*`cv)yW$<=ipx#WmB<3 zbGB=@)co_<2yPo(>Q6t^MIz(d<<%o$jfD+_d)Ts-Q8%Ok;)3&H2yk=|1z1TeS4$ zL6Xh0^hO>tY3+f5XfB;B`){L0Uq)51^|kV7bL;j@B-RoJ<=_fGj`P-#O|{+NTV=&v z{SVUl61WB4zUO^l?xJaHy=xFPN%VZwH>vB?{I!U>ZVbJsO<43EYbVj0I=eMw>T-PV3W-<)@pX%y# z=PcAgzsu)}+^WKlYYKdQ8n#&@DKXJ>?ryYR;_~9RUuCHlD4aX3O+MT1rrV@~SIlAK$+Nl?ZXa3){hnKYG`P?XZm3^VtLUSy4qjna@k6Xl>Gt*4dD?7ezn3+2wRGBAKA-L5+nq+RJg@mtOjAcbPC3he5Y??J;hF>G54E8fDQ%Zv4h+CN#!p*JRDIw{T~D~X&-c;#zoC^P`2 zCE4UeoBCe)dPSHF3Z6{?;cmJar1bXoO2roklmQkJs2O-Qax?m>pM=&+Qix<$ydc0# zY2&nr*Bn5}rj|F&iUAL9d;hMQNEKqL^0hkjL-Qiq`H@*6qlPwwcA6j8-19U@`BtC> zc9P+R7?c+fGF0?bFwf7`$N{lSEc+a6$0J`~FBnLB&LOn`>@7G;3I$uGSd0V2#PXOD z8c>4Pb3ClDR&R&W&jy*$3_dmw-zg%jlmwk$qMH(1zt<52x3HR>Z1MCz~3_DCB#^1k4(-r>k z{Dljna2*ZbD_0(l@#=ue10^%FIHmPm4(38xbRr+XMG6*E$qp0`%5;%~eswaY(*+Fs z#dGIl1rhb#qo}L6sSI#sl@D)+R{A3ieGY z$x+}U2Ry+yZj>2co`vhfc5GS-i)FQrU$^ulqjanm3p~_ZKnzeaP(J7kTP3ni0*?Ra zy2wAnTLS0?a&AeuP>tA)H3ex;RALc&IM75m(>MymIK1S(@w6sREap~w32yFkZn&o) zufAurnjQQIdt~n439&70Vx3%tA#ooE3IXdKT$?N_N_={OxQ*s$G4%>#bTo*H4j&yt=`rIB|Rmuyd%us!&$l3z9YX z6xa&I`R)GwP);K#{xB5<6{n;Ess!4hL-*Tsvte$+s*bH3XqkVwel^=cwGMgFYgTBC z+j}P$HiY&Fucu9G=h&6Y)3=-A8Slv^X;HvD zZe+c@Su!|rFsbIUvFKT$0)!XaZog3~ItjBoXH%I;i z0Mx~5qN){s^Thb|9+=-l1bB-cNX8{xE;q<~8lxT4#9%Dajp?;;(-VP0np-e;+ zAg{@?+GggnXWsOiqsFw_IDALqP;FdxT|zDp(3@)2ZG8su#ET?04OPCp|IjQ@zphW} zG5~k@n;weK?}<-pD^P>|62})laVH{{%Ch>+aG5}z2Ea-W+^YS(SLe#P)n^4xx%PFr z##y4yB$9bMDvoUYEIiY<_k4NEnZfLK^3VPml#9xIdmofln%i&UU?#@yJTKOkgAA45 zmv}hQB~CxL z=LG{95)d#_r|oGhg|bg3-RT@&D&Pd9io+%gEv%;a0wP1r=0HxvBlUjnVH6Uk)!P;s z8(Tgm9)VBHjrFK)K1My4#+C^EV4pI@EhVL`#Ut~JkoTW#{q>ldx@k+C)B=lf;TFJa z*^b{1@uK~u!$dDqwk<>prm|&wi;CuW2UBqx^w04&p3tv8X&&gdSV_!a-)PEjV@^iK z#>QT;xpuWcZt6Bfr}&T@T;uR+r`4Q@E4u)!4@%ujlKgb)0>ms2-J9ld68dBlj)-`p zykuRWc~GLO+mN$;7iarf*wHo*vzz6_*J;#8LXJ;po$mt>k+?5FWDHazF74jJj#4($ zbv;bKU)gR0BERUoOH#yySPaW_gTM0m8 z#JB57mD%D!UwW-xD)1h1EQH3Nkro|Wp(6(h#pjR8wLqC4I6I1S0tXjDGfMwzQNh7N zySnboMI1&IVz}HJ6D!%ASd_tsbwG?rs>`EL?YsvqIQV&gKHHiZw5>%2`_?pmq*pBD zMiMv9eGKgx>vP6&^82!mv3mP-2OH!h!b-1$z9NH;n7%7*O*n{fSwJ!G3KoBaDYd2W zqX&XM9AD6lUG|k#Z=d4{t}nFmXS24jwB(H?qf2D3IKAzP_!_x2FaR+k^dS~EQMODo z#ywKS?jc{%f>6@=?v{Q8;1PdSgxueof5t!bk|2J_{Go;MljtHVJ~=LKuJ@Ci>DYdD z-Wqs}1p6j^s^E+*+eDlFmRohH8leWUUG#T5oS|L5D4`4kg3~R>{-2 zhZRy|oB?BKg=m-F1(^&T*tT{gm-@*G4+Ap5+9G+&Z;s|1VnaYcX*~F9F+vS%*&U~< zTVjsWf$6kiENrY$3B5MgABDCH=S6p}wsluUwEw6OtF0eIozDjh)fW-oZzAl#1oBV! zDld$e=I-${jn^aSiLS9IE+kf{C?<%E3ru6n0>|E+QXr3Ed-#?2rmsYteQO*$bubdx;V+KEqo#e3pun|!>u(JIFJ=LL`2PnvyY1uR;<(if4L%8w{W@za z&gaOR#uhSyeq8&V-Ui?=fPI|5vL?ug>ljRdrh$P$-R?C`!cswRPE1S$pwZ~rhyRQU z3~ax*MosoVEA7_Q)}H%&0{H-iT-H9l*8||I+8-czO3Y=BzKABEqyg+Y&?`K4aA>H! zX&m$P`SX#+HIjDn{W*vV?qk1-Vvd{sV1KZk1+P(YQ2s{6&R;v$Mf+cWPJ}fZ=$AZ; z(t$At=&Qt-+A;RdwP9ZYE|m7HOB70=aBbv$UJHD&FrXDLfEmSY+7t%9`l5!!o}GRE zZauKeyu4Xw5Vn0kPFJMsRFRRDCH1SwFvJ;_k&c6Vz*Y`Efj&clLFKu4mX2$b?V2u@ zlbirNU}3Y=2I_Rig`w;N2OVN_H~gUBj=p<@|9<*P#sS)M(;BG}>#FKpkj4H)xxFtiwfQ3V*TS&f4`xZS4#KcUwD}#b5paxlfyX zO@^e}BA|klyvb-&J=_U(f|vXd0LcuxUD}?NoxSAu^;ddlP4U33?4;}@RiK_2Iyw|a zY8kWqW@No4(0wX}K(EAzt3|{IiZ8>Gzo@6t&lSHnspM{0}9!KAcug?G7Vu(s+q`VDjqz>H8PJ|aNV?>*-R*m&hbGs!C*EiuC zxL4ZjUd<8|`o;GB;IjTS59{I11Z5&KZ89>d`<=UOlb`jVk5{hh;q*m6tW#L9&O>h& zD0a}y5j`sg{nu-D#h`Gtphv8{_Q%_x-vxp7ZCnokO6@0p@IdvD4WXI%tCX;E-3>bB zVr~i6a`fr=GXr@hgx1T%%$*}O2Ya3%bG_O&fR7*zZih4L3G**UEe$$pLzvj0a?K*R zu5)=o7ka`ngaz6CWw^I*pscB527hqsIiOBXhN_N(cUq$id05qQpd$df*9CzH*UKKP zS`8;T31xXR3qTEs`-xVm8)=Jx@5^LOJ=!aBPm$*@^nEx*y-KdG(Bf1NHP}8G=~%hN z(9#rlPA0JxSL3nm*sD>!5yo!vmMm#x{8O~x1);+6=lU%Q9WWmfXYYm6{d>L?S9~_sre|8PSodM}?&|2B z8x>k?3j%=2Xo=|LDLgK5R3UR+1#oCiO;^1abh47(@9njw&Od4E_RxyM*>nnQSKa(zK$Zy} zpJUm+m!;#K=?i=4BqSj3@qut!TsjG_021wy0uMCsrjlwyo{P&zS}_u3K%cd46T6?> z1M@E$Ur%AAbpYX9xC7J+di~9K9e`6JTb21WsMD6)ox_dW``J-v55WAw!@DCifTP{I z9nzv=hy!WJ2P%|A{;4>Py!%9<@c(3(ay$7a!~AFTt)(yHN8x(*@Pm% z!&pP17ZTjv-Mw@l$(LA<_Sq+|Uo|0V9tqpGZ}(EcTrbt(AjXymi^~j6^g_;VE#l54wJi2N08UJTfEgj!Y&`#wAyP(l>AfJ1wBQ z*SE+$sinnOy=GM^jRqQayKyEHzDPf^mA)8yL#tKRW(tOYz zQ2af103CE+Boa*x+EWdxe0<7<7X*UQyQztIg_ORSvnWj-UZInZdXuS`3X}i|+5t#V zSvk^$^b_Fy>$4AqFlUR=J%i}Qn6?6N=Rz%#0N_5LG=J=+kH9b-J_J)c6}~AD8dyb} z{__2)aYw69uo)ec6tf~IDIY&@B#2|SHsPy~dRC>7!&Gy07aVGGzWpm%?D`ULJq~DG z$a}H1J$-uzi&Y$ZaBcL{Z7o_(4M0Y{RoGz7&P9v{@cnLdIg_0i4Vhva1jKgf(f}fY_w@?xiqt-_J8B$1nXa3Ff zZKegpSmL}1-);jVRX-X3@nzi$4~O!Z4}QbfXkQj zH8)N8iu7cMAXGivVZ^U%jX}*1+(P)PlM{Ub*K_r#_9@7}=ZP&XorXXP^rs|8VB6{p8D6RD> zWeSWY9Tx{*`7m$~$1H1WgD$#!WC>xAM=Lb~zcoEuD#+Z>nVD<g$qJe(vD+%Z_#@1)&%Z4HHxlY$kQ#?^G|2bO*#d6PEbO214+-e6x zpc8!)bO)*#o?y9j?vIIOc`Y93l-mo_b%u(7>-*PHDB|8fjzTf$Z(p&tJH==1hMO{g zxE2Ah)q5*2#?9?ZqPC6>k~cdWYB@PI<-r@l5GsZj7OK_d9clnd(%Zj(KR1Js`s^7r zSxZaH$xwk%UYTSAl{`4ebAlW2qSpHF@0|B#W@n49D14gyf?nB~7y=xPn7V3VZk}H) z?=igDtjwQXs1D=LFE7ya9FqkM)-;k)Ap+TlsZ(R1rngah>0X}>p&^HK! W4SBLLb`p3|33dW;oPPAu?f(VzjZ{Pc literal 0 HcmV?d00001 diff --git a/tutorial/07-Camera/assets/index.json b/tutorial/07-Camera/assets/index.json new file mode 100644 index 00000000..609f7585 --- /dev/null +++ b/tutorial/07-Camera/assets/index.json @@ -0,0 +1,15 @@ +{ + "backdrops": [ + { + "bitmapResolution": 2, + "name": "backdrop1", + "path": "1.png" + } + ], + "map": { "width": 240, "height": 240 }, + "run": { "width": 720, "height": 720 }, + "zorder": [ + "MyAircraft", + "Bullet" + ] +} \ No newline at end of file diff --git a/tutorial/07-Camera/assets/sprites/Bullet/30.png b/tutorial/07-Camera/assets/sprites/Bullet/30.png new file mode 100644 index 0000000000000000000000000000000000000000..86001818326f52b89dcf770ce15f3ea7ee419cdb GIT binary patch literal 803 zcmV+;1Kj+HP)<00089NklT!Olt-{!FYO76eNXQp*PNlje?QGS9{re8>fR-`6B z#Vjm9g;QW9S#^@{;!5ChriHc;BMoRd|PPhkIOLBZUeov|+_{l9sK`QE4p_sEwq<#G7 zz$@WV(g%ro3m*j_)d^yl3(O0>Cg%4)TP6y;3WhPVVjPeNe+udz1YyRc(F*2i_)N%M zwzHP5^OwIO8}b;(45V4S$=O=MJcF1O=>=%8VVTHeO?L8WWP_colU1%Qs7T>2$1Jdq z6xU|UGLc(qaE;+A@<;HGLTtnU1WxG)6SdjVUDDBU+gWq^$d;p)80iOMp!#KU7$iZ+zN*_M5_9;{$Z_s~DQV=s zM98u!cJN*hrih_*(KQNDwM-;EkmNCXb>M&`ccxAudcImXE=*b zLH6c8zcCp484}gKwfqEU#d(~}ghI7@5<9J)<$dtQum5(c<(TES(5m$;_bKc)-LSi} zg?4!T2GSJg{YW~ne*gdgEp$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1jX>DO= hWiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1kRKZ<_!B literal 0 HcmV?d00001 diff --git a/tutorial/07-Camera/assets/sprites/Bullet/index.json b/tutorial/07-Camera/assets/sprites/Bullet/index.json new file mode 100644 index 00000000..1b1dca06 --- /dev/null +++ b/tutorial/07-Camera/assets/sprites/Bullet/index.json @@ -0,0 +1,20 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "bullet", + "path": "30.png", + "faceRight": 90, + "x": 8, + "y": 20 + } + ], + "costumeIndex": 0, + "heading": 0, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": 230, + "y": 185 +} \ No newline at end of file diff --git a/tutorial/07-Camera/assets/sprites/MyAircraft/8.png b/tutorial/07-Camera/assets/sprites/MyAircraft/8.png new file mode 100644 index 0000000000000000000000000000000000000000..650e0e0d479de19b871f761924df8993822b6aab GIT binary patch literal 14074 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 literal 0 HcmV?d00001 diff --git a/tutorial/07-Camera/assets/sprites/MyAircraft/index.json b/tutorial/07-Camera/assets/sprites/MyAircraft/index.json new file mode 100644 index 00000000..bf3884f5 --- /dev/null +++ b/tutorial/07-Camera/assets/sprites/MyAircraft/index.json @@ -0,0 +1,19 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "hero", + "path": "8.png", + "x": 98, + "y": 122 + } + ], + "costumeIndex": 0, + "heading": 90, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.45, + "visible": true, + "x": -131, + "y": -161 +} \ No newline at end of file diff --git a/tutorial/07-Camera/main.spx b/tutorial/07-Camera/main.spx new file mode 100644 index 00000000..a1bc6fe4 --- /dev/null +++ b/tutorial/07-Camera/main.spx @@ -0,0 +1,4 @@ +var ( + MyAircraft MyAircraft + Bullet Bullet +) diff --git a/tutorial/09-LoopAnim/Bullet.spx b/tutorial/09-LoopAnim/Bullet.spx new file mode 100644 index 00000000..e69de29b diff --git a/tutorial/09-LoopAnim/SmallEnemy.spx b/tutorial/09-LoopAnim/SmallEnemy.spx new file mode 100644 index 00000000..dc3504d3 --- /dev/null +++ b/tutorial/09-LoopAnim/SmallEnemy.spx @@ -0,0 +1,6 @@ +onStart => { + setXYpos 0,0 + show + wait 1 + animate "die" +} diff --git a/tutorial/09-LoopAnim/assets/1.png b/tutorial/09-LoopAnim/assets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e6e964c1c5014e7ab35a96ff5d6848064a374b GIT binary patch literal 12663 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 W4SBLLb`p3|33dW;oPPAu?f(VzjZ{Pc literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/index.json b/tutorial/09-LoopAnim/assets/index.json new file mode 100644 index 00000000..4cd8a9c9 --- /dev/null +++ b/tutorial/09-LoopAnim/assets/index.json @@ -0,0 +1,13 @@ +{ + "backdrops": [ + { + "bitmapResolution": 2, + "name": "backdrop1", + "path": "1.png" + } + ], + "zorder": [ + "Bullet", + "SmallEnemy" + ] +} \ No newline at end of file diff --git a/tutorial/09-LoopAnim/assets/sounds/explode/1.wav b/tutorial/09-LoopAnim/assets/sounds/explode/1.wav new file mode 100644 index 0000000000000000000000000000000000000000..3835c4d8ccf531d5ccfb802f9f0d154969dd5d5d GIT binary patch literal 9276 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 literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sounds/explode/index.json b/tutorial/09-LoopAnim/assets/sounds/explode/index.json new file mode 100644 index 00000000..af4acf82 --- /dev/null +++ b/tutorial/09-LoopAnim/assets/sounds/explode/index.json @@ -0,0 +1,3 @@ +{ + "path": "1.wav" +} \ No newline at end of file diff --git a/tutorial/09-LoopAnim/assets/sprites/Bullet/30.png b/tutorial/09-LoopAnim/assets/sprites/Bullet/30.png new file mode 100644 index 0000000000000000000000000000000000000000..86001818326f52b89dcf770ce15f3ea7ee419cdb GIT binary patch literal 803 zcmV+;1Kj+HP)<00089NklT!Olt-{!FYO76eNXQp*PNlje?QGS9{re8>fR-`6B z#Vjm9g;QW9S#^@{;!5ChriHc;BMoRd|PPhkIOLBZUeov|+_{l9sK`QE4p_sEwq<#G7 zz$@WV(g%ro3m*j_)d^yl3(O0>Cg%4)TP6y;3WhPVVjPeNe+udz1YyRc(F*2i_)N%M zwzHP5^OwIO8}b;(45V4S$=O=MJcF1O=>=%8VVTHeO?L8WWP_colU1%Qs7T>2$1Jdq z6xU|UGLc(qaE;+A@<;HGLTtnU1WxG)6SdjVUDDBU+gWq^$d;p)80iOMp!#KU7$iZ+zN*_M5_9;{$Z_s~DQV=s zM98u!cJN*hrih_*(KQNDwM-;EkmNCXb>M&`ccxAudcImXE=*b zLH6c8zcCp484}gKwfqEU#d(~}ghI7@5<9J)<$dtQum5(c<(TES(5m$;_bKc)-LSi} zg?4!T2GSJg{YW~ne*gdgEp$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1jX>DO= hWiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1kRKZ<_!B literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sprites/Bullet/index.json b/tutorial/09-LoopAnim/assets/sprites/Bullet/index.json new file mode 100644 index 00000000..1b1dca06 --- /dev/null +++ b/tutorial/09-LoopAnim/assets/sprites/Bullet/index.json @@ -0,0 +1,20 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "bullet", + "path": "30.png", + "faceRight": 90, + "x": 8, + "y": 20 + } + ], + "costumeIndex": 0, + "heading": 0, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": 230, + "y": 185 +} \ No newline at end of file diff --git a/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/32.png b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/32.png new file mode 100644 index 0000000000000000000000000000000000000000..0404db76eda51986336515594b2f289800e27346 GIT binary patch literal 3441 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 Ts0M%T00000NkvXXu0mjfV@{g# literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/33.png b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/33.png new file mode 100644 index 0000000000000000000000000000000000000000..27dffd6643c0aa5625e8741e66c4877b064bed30 GIT binary patch literal 3959 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 Rf9?PP002ovPDHLkV1g@+xDx;X literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/34.png b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/34.png new file mode 100644 index 0000000000000000000000000000000000000000..ad983dff1b868943b588d8686484c0b255077c07 GIT binary patch literal 4388 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 KMNUMnLSTXjAhpE+ literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/36.png b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/36.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc09b99188c19e1f49e80a60a690f67e0c62b31 GIT binary patch literal 1981 zcmV;u2SWIXP)WrE zsTQ$UTLvrz2HOGx3>OwZza-^OuWxbAKor|#t(+>#OQSHd+`pAgmh^fkoVHIIH$$oN<*>2<`$8pPgH zqLX;O5;49C?&LMm*Fo|EV)Z|wtV(__dIYh5#0d8};je=1PJHv(HjTZ5a5HT6a6h*& zW0v6iZ#(+=PV^no_eJku#_j>(0ptyTU`;cZ;#b1e6*P%{jSSD#_Q9VIfn<{DYOHB! zKf6TB5yRsk^$yObgnkL%{vp(=`*T137be ze+iCLqDDo3LhR1=9%>phjQ42OZ=VD40S{M}G{SvCcoMF{YsXOu{I2@svp8-$GQk*L ze-y5y7ydd1qDpcko$s$k#_QUDqSePI@p)44`TgrztBmkXAUvHRIZ9?TGB)1f3Bo6{ zHGq@_2a);O2gBV5L9A6ge*~X%2C+MW+D@CO-dP%XP^>q?3n0_*wL02_HD?mXX@56R`>A};Of|xNK=?FblV*ywAmA2=CBbRLQmvzF{k+q| zM|-UuDUh6L)4F&&T*sux`&Qv<%!m7h@N&fDzeROV;2sd@`gPcvgQT4x)9ae)tHX%N zOF52B6>0 zO0kBl!aY=Ecz)&s`YXCiAp4$&zfWLH!$!Ez2-g^;`%ZLMtM0hceIqvzTi4sPR-t$8 zUvT*0Al8T=2#g}8do}gzFJWeB?AG6P{_4?BE%J~Rb16O}JOE#-`#7EzJ%m+0hS<)S zTL)c4jMjbL=N+qmJ^XkN+(iTWOJhdp-S~YV`%h%f<8V)GnrZ6Z#94e^BfL-v*XrMH zkkpG<`-|uk$k2|0tU1KED!7zE#7_P{$|$aH9wd|CI{5jmIPVs?qZzDC>bHOM7{d5CVch)GC1xmnnSF;hT6ss_~ZoKP9OU5sxvFO$FNoeaDDxVvAh$M z!VEr%HK)tNjdZ}pd?7k)gclg$N=!3|)ZaB;chpGsBi2sgaTJ2S9c+)|@lQO9DoCff7Cr7qa4r*~jrE{VbZy!!_JbR1@5T-s99=0-qrR z%(l6%oBO|`SkoppI<>c!Z)9b1s0M%T P00000NkvXXu0mjfVF=l! literal 0 HcmV?d00001 diff --git a/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/index.json b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/index.json new file mode 100644 index 00000000..34030296 --- /dev/null +++ b/tutorial/09-LoopAnim/assets/sprites/SmallEnemy/index.json @@ -0,0 +1,56 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "normal", + "path": "32.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-0", + "path": "33.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-1", + "path": "34.png", + "x": 50, + "y": 44 + }, + { + "bitmapResolution": 2, + "name": "die-2", + "path": "35.png", + "x": 56, + "y": 50 + }, + { + "bitmapResolution": 2, + "name": "die-3", + "path": "36.png", + "x": 44, + "y": 38 + } + ], + "costumeIndex": 0, + "fAnimations": { + "die": { + "duration": 0.2, + "from": "die-0", + "to": "die-3", + "isLoop": true + } + }, + "defaultAnimation": "init", + "heading": 90, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": -58, + "y": -179 +} \ No newline at end of file diff --git a/tutorial/09-LoopAnim/main.spx b/tutorial/09-LoopAnim/main.spx new file mode 100644 index 00000000..f01d3f86 --- /dev/null +++ b/tutorial/09-LoopAnim/main.spx @@ -0,0 +1,4 @@ +var ( + explode Sound + Bullet Bullet +) diff --git a/tutorial/10-PivotPoint/Calf.spx b/tutorial/10-PivotPoint/Calf.spx new file mode 100644 index 00000000..bc090f66 --- /dev/null +++ b/tutorial/10-PivotPoint/Calf.spx @@ -0,0 +1,27 @@ +import "math" +onStart => { + say "Hello Go+" + updateInterval := 0.03 + timer := 0.0 + setXYpos 0, 0 + for timer < 3{ + timer += updateInterval + wait updateInterval + setXYpos mouseX, mouseY + } + timer=0.0 + for timer < 3{ + timer += updateInterval + wait updateInterval + setHeading timer*60 + + sin, _ := math.Sincos(timer*90 * math.Pi / 180) + setSize(sin*0.5+1.5) + } + timer=0.0 + for timer < 5{ + timer += updateInterval + wait updateInterval + step 40*updateInterval + } +} diff --git a/tutorial/10-PivotPoint/assets/index.json b/tutorial/10-PivotPoint/assets/index.json new file mode 100644 index 00000000..055e3298 --- /dev/null +++ b/tutorial/10-PivotPoint/assets/index.json @@ -0,0 +1,9 @@ +{ + "map": { + "width": 480, + "height": 360 + }, + "zorder": [ + "Calf" + ] +} \ No newline at end of file diff --git a/tutorial/10-PivotPoint/assets/sprites/Calf/1.png b/tutorial/10-PivotPoint/assets/sprites/Calf/1.png new file mode 100644 index 0000000000000000000000000000000000000000..24147724234e7147be07e9a0b85c1cc8bbdef976 GIT binary patch literal 24443 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

@bqd&pL)`+sikKuy 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 { + destroy +} + +onStart => { + for { + wait 0.3 + clone + } +} + +onCloned => { + setXYpos mouseX, mouseY + show + for { + wait 0.04 + step 10 + if touching(Edge) { + destroy + } + } +} diff --git a/tutorial/11_MutilScene/MyAircraft.spx b/tutorial/11_MutilScene/MyAircraft.spx new file mode 100644 index 00000000..e3077678 --- /dev/null +++ b/tutorial/11_MutilScene/MyAircraft.spx @@ -0,0 +1,20 @@ + +import "github.com/goplus/spx" +onStart => { + setXYpos 0, 0 + for { + wait 0.1 + setXYpos mouseX, mouseY + } +} + + +onStart => { + timer:=0.0 + for timer < 3{ + wait 0.1 + timer+=0.1 + } + println("Load Scene") + spx.Gopt_Game_Reload(this.Game, 0) +} diff --git a/tutorial/11_MutilScene/SmallEnemy.spx b/tutorial/11_MutilScene/SmallEnemy.spx new file mode 100644 index 00000000..6ef61727 --- /dev/null +++ b/tutorial/11_MutilScene/SmallEnemy.spx @@ -0,0 +1,31 @@ +onStart => { + for { + wait 0.3 + clone + } +} + +onCloned => { + setXYpos rand(-131, 131), 237 + show + for { + wait 0.05 + changeYpos -2.4 + if touching(EdgeBottom) { + destroy + } + } +} + +onCloned => { + life := 3 + for { + wait 0.05 + if touching("Bullet") { + life-- + if life == 0 { + die + } + } + } +} diff --git a/tutorial/11_MutilScene/assets/1.png b/tutorial/11_MutilScene/assets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e6e964c1c5014e7ab35a96ff5d6848064a374b GIT binary patch literal 12663 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 W4SBLLb`p3|33dW;oPPAu?f(VzjZ{Pc literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/2.png b/tutorial/11_MutilScene/assets/2.png new file mode 100644 index 0000000000000000000000000000000000000000..da7523e1c385b8e07a53d3b7dacabbca24456208 GIT binary patch literal 21111 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 literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sounds/explode/index.json b/tutorial/11_MutilScene/assets/sounds/explode/index.json new file mode 100644 index 00000000..af4acf82 --- /dev/null +++ b/tutorial/11_MutilScene/assets/sounds/explode/index.json @@ -0,0 +1,3 @@ +{ + "path": "1.wav" +} \ No newline at end of file diff --git a/tutorial/11_MutilScene/assets/sprites/Bullet/30.png b/tutorial/11_MutilScene/assets/sprites/Bullet/30.png new file mode 100644 index 0000000000000000000000000000000000000000..86001818326f52b89dcf770ce15f3ea7ee419cdb GIT binary patch literal 803 zcmV+;1Kj+HP)<00089NklT!Olt-{!FYO76eNXQp*PNlje?QGS9{re8>fR-`6B z#Vjm9g;QW9S#^@{;!5ChriHc;BMoRd|PPhkIOLBZUeov|+_{l9sK`QE4p_sEwq<#G7 zz$@WV(g%ro3m*j_)d^yl3(O0>Cg%4)TP6y;3WhPVVjPeNe+udz1YyRc(F*2i_)N%M zwzHP5^OwIO8}b;(45V4S$=O=MJcF1O=>=%8VVTHeO?L8WWP_colU1%Qs7T>2$1Jdq z6xU|UGLc(qaE;+A@<;HGLTtnU1WxG)6SdjVUDDBU+gWq^$d;p)80iOMp!#KU7$iZ+zN*_M5_9;{$Z_s~DQV=s zM98u!cJN*hrih_*(KQNDwM-;EkmNCXb>M&`ccxAudcImXE=*b zLH6c8zcCp484}gKwfqEU#d(~}ghI7@5<9J)<$dtQum5(c<(TES(5m$;_bKc)-LSi} zg?4!T2GSJg{YW~ne*gdgEp$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1jX>DO= hWiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1kRKZ<_!B literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/Bullet/index.json b/tutorial/11_MutilScene/assets/sprites/Bullet/index.json new file mode 100644 index 00000000..1b1dca06 --- /dev/null +++ b/tutorial/11_MutilScene/assets/sprites/Bullet/index.json @@ -0,0 +1,20 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "bullet", + "path": "30.png", + "faceRight": 90, + "x": 8, + "y": 20 + } + ], + "costumeIndex": 0, + "heading": 0, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": 230, + "y": 185 +} \ No newline at end of file diff --git a/tutorial/11_MutilScene/assets/sprites/MyAircraft/8.png b/tutorial/11_MutilScene/assets/sprites/MyAircraft/8.png new file mode 100644 index 0000000000000000000000000000000000000000..650e0e0d479de19b871f761924df8993822b6aab GIT binary patch literal 14074 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 literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/MyAircraft/index.json b/tutorial/11_MutilScene/assets/sprites/MyAircraft/index.json new file mode 100644 index 00000000..bf3884f5 --- /dev/null +++ b/tutorial/11_MutilScene/assets/sprites/MyAircraft/index.json @@ -0,0 +1,19 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "hero", + "path": "8.png", + "x": 98, + "y": 122 + } + ], + "costumeIndex": 0, + "heading": 90, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.45, + "visible": true, + "x": -131, + "y": -161 +} \ No newline at end of file diff --git a/tutorial/11_MutilScene/assets/sprites/SmallEnemy/32.png b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/32.png new file mode 100644 index 0000000000000000000000000000000000000000..0404db76eda51986336515594b2f289800e27346 GIT binary patch literal 3441 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 Ts0M%T00000NkvXXu0mjfV@{g# literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/SmallEnemy/33.png b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/33.png new file mode 100644 index 0000000000000000000000000000000000000000..27dffd6643c0aa5625e8741e66c4877b064bed30 GIT binary patch literal 3959 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 Rf9?PP002ovPDHLkV1g@+xDx;X literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/SmallEnemy/34.png b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/34.png new file mode 100644 index 0000000000000000000000000000000000000000..ad983dff1b868943b588d8686484c0b255077c07 GIT binary patch literal 4388 zcmV+<5!>#GP)&$d=@9)ZcUndec))SKN{=x6eF8RsJwrbW{hTx9+&{u z4BQ4B4lMefenXJLT#0ezK(A(uwq7+bPT;SVEY0;DUu&dNCj|q40X!Gj1YD{dA7y0t zk|j&5T^JobB$R07b-26m{`>EDRaz*5>*UwuW`+StMpQwY3F2PjGNBF~#HYSOfjNv$K;JQdL=L5A=8c z_t5*Hp`pSUId4c8#>B)#P#|h&t{`oP*Yt^uW!He zPQuY+#}ZbQbJ^i`xlD{XdX$BO+S*#el#~==%C23z=yg?972)*DFDER+d5#rv88zwr z^9hR!3kmPK`)}De5pUi~)JLHT)kbzo{N4v7G|m7n@k;LX5& zO7`g0jM0n;c5W6BG*ujSj0tR)0B`O3XG=y#3uQ$P2YJrU9XqT>X5<%e(o$G>n3;3& zw193VOz~%5T%OxG`N}_VfG2#1gXIS>yZBG4J=s7(40(3IZ;dE6#XuMOm2z6*}Qz)HxB6 z(WaOoe-{Qs$MI>Zk?r}<&#}vEPJY_k+sR{BuUgd!qyrodM=+RSQ?$0t3R9*6e+b;& zO;(nzpsxHiV|r#ez;}Ujk=^XX>m(o*AU`LGltT&?Ck83_(+lB`ND+3%Bg>*RQP*< zF9F*$WBMs$f)r2fF5eyn90cr8j+Z&Q1=y&({z&os+kyWAt_RLmJhk0eS=(&vOHE*g z7ui<_v^9VBWxD7e&A)jl3065d;V6Kn;5;NXw6(RxcB5g%A;ytLX1CiZn`~`uzXykh zE7xgay5&SKM5pq*Bb3;irx|mGF~+8htc<)cX^}XeQ3JEtLcs)&8*_R)VnT=F>Fvs# zENPK=>Z3rXavgGAcH?yg+3i-N0w8tE_=&v084<<~xnuiQ!h?Ca#F${joOWbo{_6}^ z?nO|b8{|JO9(b+k#$lz@U;hLL`kZ8whV!WBzX;0il)^A! zN-#W-u5-e;aaJSk8o->{vpF=`pq*{r1XX&?djWsAC<&6i$?NHta|3DW+*Fn=!g!rV z)@!1o`7%R8Lg~7kE~lw}vIViPTZ648hSb+_OkDNm8x(sA3JOH|SO)y1F-z5q>BWrc z>?R?YZG7{JtFI=UcjJ84suEbMYHw|~8$I0bLF7_3P;DzpScEMu=9S2^BO^uYB3JeL ze8jNgk`nsfiqg^$qbG-lpGB^mkiZUhwCJdbNuww7x=>KixBL2-v194}JaEs?OXxn; z)QGb1l#w}_F=s%G5tGhC%0j}z!f4Ka=#fXsHDY7qOrGOt=CnO6?Q_C)pKzgHUBMER z9dmvpm?G;W_TXSE*9EQgMpGk~JqZH`o(L>{tE^;^IyQklGAx|WXSc<0u@TSLbLbGS z=eQg!VNIOK0z+aVJLITQT!ww{5tma1U$bIxAvCv16DJXtmzSD;m#Ef7M_Dk)-N#)$ zd-rl%*`OiZ_O|@Bzaa*n^Q||0;6N?|pLpsI8@lkpMfauRPl?8QQ8VTY(#i%HD^$P7 z*C21F_nppWo~(V{M&j&K@y>J+%XMgQJPFmnJYtvKWaaF)_@5lvycU^t7`& zoVH;D&*6#8n6c-bhdI6o*$#j2zWw_NhYlM?c*&*Ag!6Fx<}F;;97h+8bk}(H?K3f` z71uB8K5BnicsQ3olO{34X3U&PsP+(aXI86^veFO!{hriyQcoQKeyJIAhA~F^pvYAn z4hJ=0Eq>}ra-CUo=1^8K?ULzqQ2G~NaQ0PkoMQlDiu8k>$Y#7?8j2Gf7ZJvr1Hyp2 zcJ7c$nPW>V3k2mQCCr#H%z&g3EEey~9(#N=n0Ga@$l_9789iKhgs>1@N zfM;`z%G{L!559xnN9X1yFjpv94h9q)WF{TKb&C2N6B7^S@W)&@Pe=&YCBqP_re4Y| z$jOtE!R+u;yv1HxvAu1kq%9XY0-!| zxp{fW&I(P($DnIQvbF4NZdPe>I*}FGP+zf><*&Rg$U04Rlw^||kri%EOEWQe$S}@2 zQ?I912FnE(PBrty=b_kf-@=8v!4!E8f~?E@4p?@o1EZ~%GDb`$e_87e<_fud7G*^{ zc93gL_fDtxFT$KW`?^$kB75fC8+bXV1ii;n(TmAGl?l+a#*ZIwszX9hKh(m*1rLFt zW3g*MdX%Lux)xpiGiTA|T9!Wle889{-)~W}LCG3RkQEBU4oZh-Y)nALEPdex%D(dR z^QEUi)bm$>vTk)BaJMll){HrW8KY)v&j2aC$q;ra4@!a00g zYAQ3?Uq_f2AlaI%jK;BUgNlH<>_&Dp zcqlE!f3p*8?;dX3TL0;%rpi1vmOb|ZsK8OkzT|w;y}xz)cEX$H&qwyfb<&#mcm*># znVER)?CS_eLTz5ZZk+|Oz!dxP@^TPzI21hl;)`JPp9LP*bxa>; z%p~BifD@FFA7spSoKAO;F}up#z1yTwB_}7FD*Ia0Cp)(CI?6s&@Cz3%MCH!v?x%=J zaj5tYy4k6 zPD+UtRjAmV!W4M0)FWbFDe82jQXdJ*`|^1&j#n8X-!HGFE;@$qlg?8=GpRmnuB?pc zhAA(dgel+KRHm($F~(=CPy?7O@!bTJon-rgR5-Yrn<*=CLk$iEil+-BB({j>i-&h8 zos{*;ewo@@el07JvR)%~jl?*4UsUNisZ4C?J;>TEh57&N2Ix?fkdEFG{Iz}0jIk=7 zF4|8GuwG$~Y6Fc~ndQW@C1Z`+ntZpvzOWe;0_ic{gX~L8JUbP=#T(PpObl?V&o_g* zJa{N82|vD-H!Zxm;&nn%p(UGZYT$ZiBvxYca-uwn<|QUOKVkB!}SIn3}xCv|c@_e&4Xmfvj`e~*`W24HHzXG=@GeVtG zpDX~*1TF{WXvXwW#&{GDuq)Zt$@aHP49Qn;pAxgGfXPM;skF2-(pYaK;(27zXP-^@ z1^UO->`Z+vCY_L9v~Rr~Mg~I5A81*@*U4jGpMhShrCbW4E)ThK7cj zG&rg39Zt^TI@8-sA1c>1f|Fr_>5baQ{obyn6-Dt~E0{s(Z&NwhQB z2QNZ<>c@aZ4 zJ@dtWFhzosJmcn6pEp(wlod ePDe5{MQ&qnWMy)w27m4V0000rPxfA8}?zuWsxaM1W`VZdVJM5hc_(0P%5s#)3JZ!pqeCr?XDBW6U!$E+R3eYNQ&n}Rm z#I)4(%=<`?YHFgOfkE&igP@IOWxph##9o`u^L%$|(QG!$evL$@p&{QW#}k|3?|{>R zZv(e0&#~#NdXYxE%KXTKz;6I+l^z(XY(F138+ZVC2zVTLQqd4<+1c6G52Muc}hwOU0-^7I^EyCef$1i(KMT4 zGu)z#R6&ZBYXk%gMqZwFTCut&X*Fcnusp{#^0Z$!8{&1j@98HhPgch^x4zzw&umeyM3`#OPD?^)u)uU0w8dr?bPP+HEu~xf*kqR?(JzKIB0nH0jdM1Ae!$%YE z77UDyV5zFFXK9Ta9OQfTG6CFfy?+_-H)+TA)>fT0J#iujezIoF;F~Tj4F*%$^o(H% z^qWi`<^E*kaVyW`TruV-#X62sm?)8>6Tn9eMvgN^E(CrT*arM5u;U#2mnc@6L{J*E zS{cwl`Vb!kAcHI?wlks~@r$ACF~eH;RHI-R<|&z{Tf zYnYXf=K!N)qL>ht5Wc?UE7=`}V<{$p)hlHJHdfDVXtAT_?MeMG1bad$UTby60)6@YsOIz|Jc7LZ$ZUzT*zUmp5%)kmx84ekP9Z$FzliY9&pzu1lTFZQ`WzMEAm+6+H^nK|WZOl) zn=S>7$d18CZoLWyDUp|;k;d#VXr;j0M!JUW@4Um#6RgRbSFI-e-4nlo8_0g(ygW9h z7v$x!sTa(~Ue=l27fSX`b@h1@2p)*_tgPw`H9D$ z5KZ-JN05MZO*TVITN|0btsNZ+iiX8&BU2h{RPvO4N(8K5iS+m{^@}vx7-ghbsj*6r z5-WASqIE%vRV7xJMEOIM{o|GGeM&@xsPfL6Z~9?X()pJyyNQ_c;)^e^rfp|8>R%rI z8HYR4(%71H*meG*HH^9wJK7&kQ3lK*RS zIEXRx7c8I zyZDp+#H0z=utb>=stpO|%NYVwob4=KZup0{-*E@+KWok$dIlc%Anka%p@HtJyUVqo zA~~y8(RKv|1=kK^L_`E>-R|9c63OqZK519{Yq9E`qiA2S!c2!U0$u}@{B6=G&vS>t z$Z^6*m%=ok@;Ou)<0a!SS&S%!fhL8qQjvX&(i5d;AJba5t*x!ZgdOj`ON`CP$k?IX z@45AVrmRYG%0xQP;%hm{Qd+|P-_)rbvP^}B{@_85{N&7;Lp|Qz=f=$qA!6gDXOe&Y zb=hDvg^*s`ww0K;ch5(DM0S!!8KI^t&&NB;2qu45E685}7AViD4p?DWt>cW5e^bVM z=@BzWVdmsfG&EA#-mEawp=>WbG+kjTwWg*fH?TnK*IFzVADBb;(&b_!FTh~kY4Z!1 zsSy!;SzTScU0*-D$6<)cc6N5seQesaiOyeFT`lKlt2jK|G|ID7M=H~Kz5|un3zX*} zBi_@>XM>UBEwUrAQJI^u6nLwmbtCpXO{SkH5gHom*J^G+W9aY6$;l@8b%dc|Hey1r zt1F5b=5iyVGl=6-$j4^0QC(dVBdY43&fKq@Z*sCk!(xDsZ%;e zOOrgPSkZy){fez1pSLKsgAv&ouZ;9*wJ7N9oP-%#MoMO1@^jK8#+f{kt;xoQ2Ev4d z1T+55Jvo^R27d9#BNlB>^}5}3ZN8x)($pa+tbp2@xDRo*5bZV^uu;vgQOQ zA)00}Lto$a8sYu}pAbI$(8C;78DQgj>&x8nCB|EQtV%QyOw86Xsk5CmR%UhOqk?_< zG@g96`K6b1Oiado&Yi~+_}MXz{T@Fqg%hJz5v~GC#eK8E$Z^U@HTo{|92cUe5(OXr z`Ok?8FK*nZ>tTMsA3cz@DQz+vw?!X+OxV-Iq1ZOmp+5QeV?pdE@|1oDVx|@|Ck;Ga zW_)Z6r~OjX*|@b@*$6fd@%h?2+H_3m>2`v_%%s~^bKoi>lC9S#f5TZ7sqqQ&>u>wc zH5}lQyygEs{j~1$nl;~Ke>H=(_Kj`Z_;?3->Pz-4*3@Ooc+y!>QIX0-U7J5Ymqfax z*_t>Ayna&;b%8wu}HXha^n*>rJ;DLt5C-Cjxea}76YQA2Rh5gj>axR+d zfPcDj6-(Q)g;qnb=#$(itW1VZ{Psr5@u9XWEA{H z&hS^jS{;CSd*ia@gtMSgr<>V&JW<2eYG}0~JoH>Y+On300ogTCoA^Yl1d%W4GJM|LKOdX;zvFQevk;h|my5Lz7Zc7^k83W(u@UVy1O< zwa~C+Xe38QmcuHPksuMXu};?3>6o55b()UJ4!c7a`N^6-4Vue|csD8yjvQeP-1*`A zLE4dL6{_yCR!qnJu$K4ru`N&`*09p%(?h8h%M+4oPV&+KpP~o%x>yqG8dxeO zr*b|qHI3(Xm@(^0YI8C&xP&M&Dgyo_R|LHI_FHVFBKA6e!2(^(^cW&6hYoV!Bxg1k zEUZBFUL7Jt+js21NWc-Pe}D8*cJ5NsM|@}pK4B}`sc8PSix<-cx3;vr1}1(FUr8m# zZ@%t=ql(_CZ5A zQWGD?G1{t14wUTL$q}H1i&*+|QL%pfGfw-RKxM$hlu5b>Q8cdev0wj^@bF<~{=9`; z`TjO4<%1Eyy6sM0AgiproQ#LM>gp+q?I97H_pg-uVYII~BeU^;S#?6@=*zSviLuTd zC=Jk3Y4w1CCu?}SIkRW$tXM1NRk~bUlJo&)VP#~p7JjswnOc96wes8d@^sF0RN+NO z@qm<#{G`lP5tOzF)_GW1*dUl_QJ5$dZ5iKzE+} z0xr7S@Z58}KVr9DoWB`Xh$Be*Go4xG&J<8T%wQ|_(Pz~T6;^;QiG9KJ0qn|@|VCgpww5U0%bLh zNQIH3RZ^=pC?Sg9sng0h3Xw!O*(Dp5H;PqcuFq8)w6toIA2 zz|6_X;meg88s8vm)ieCg?qNY0w<-@BJ1KPx!$<3go^R1P#EFWC)EmTXH2YHFrKBb}Yh(6X|_x)DV3 zt&-jGU?kBDHM-{$*sl#J-hs@6Y*Cn3bs>=)gOLU!&%2S|X|-B!1`~ouVq$=)Bz`~r z*N136W_2ZJ9bVu1$}&Vq$egvIYOMpYShYf1s`1h%v%9-@5C5P~$szvPk-A#8dh-^u zww^f7np^!DXF(F+4;GhlAf*Udlg!LaomQ%O#m_PEY<5UAZod*S>l|w@(r9CZk?N`x zx@lNZQBk+RT20YfgKEnwETkU%{`T#ZUfB7;2U)NVEn2NOR#73du5|m0|2cOar%eY3 z_%f`pR(t!nQlJ%cLGHTy+bm&NIqMW+xD$}!??iS)7~cXbH45v;x?H1{m5SddYa9IO zY8hIM_BDTz5`$d}l-2WP6$%oSaEF8Z#;(rpkq?rVMm^Z?@sOy!^~M`EXpp*2j|)t2 zfPp$ql9iIfz`*x+@X`kZ&@#b3WHmOdXQEV9auQ(*>Si;iavrh^BZsWxDkF)_%Eu2^ z)_n~+8}pPA$uY`vlL(Hi2`_8BA2t|iv@i7{>FPtG^sWe&FfTr?L2(Pghmv za76oHy;7*8q_{X7k&>8E{3jB(*w|RI{=&k;$(lV?UvJVzTEuS@4YOE+5rJ{*7_@uW zF5SUfTG)+~6h&@+zAl0jxITPtq3eo{j+W!8`Bxcwq$FNya!x2CnfyAP%s~E;;!hfk zG}`&S$b5x~e*j9=*DT;%Fj4%bENB}=cD!CU_1vbWZu&elG!(1&R~vy+owp2r9BD~t zNQnG8dHV1_vSPB}HOa}ki#~HkZ!L$zADug&=XjJOo3b0f_*##8)TtR6#K5UpS)}FF z$Bzf&K3vdBJD4eXRmmDfX|GSiNO>MogCoD%kYX^>XczP%MGK_1+z z{KzTVh>pkOiBXQf2l!W@x~AO?@E*}gUyqO&2H*Zi(X4E$BUc4P?p{Hm8?J|`-S{Mx=q zqg^G86i02-DBr&`isqhgtJG?y-|x4AA^or(DTdkH*hm`Id6scD8k#K{^(L@F z88P+(AJC2{qOr2VR$zoMYa>P@+@JW{GP|wXV5HH$k{2odQG~)M|Cc;oul6`@w|ky8 zQY6`l0IK)Usnx6i6Xln2{_7kJ5yt*bTuW#yFE(efkae7hig=09%9?b6?c9prm_Alt zq|wGWBPC||3!s>DGFPGbB9DI*+C)}mNJt3v_yMoi2fxpvFkeQ5df+n`s8t@t8Yk=7 z)89|bY;A0$sm+d<7!pt4=bxon@gq$aIWifHG#GhdZIQxE$$+ zv`_8fChhh?XR|aHYc)#Q-a2UE3|PtXYX>sBO7f2Cue$rk%8NAGRl-QoDET$D&6hZ$ z(W+%yfQeH^*{%pE5v0b;^vo(16iv=mnE8=mwHoa!d6Dk{rLNO?iLcSGFktB@=YRSu zdWI5P-g&hI1dKMuUu4%6x>kvWN==VVVWjaQjW+h%{{dYaPLPU&H=_Um04;PySaefw zW^{L9a%BKwc`jmXZ*OE|c`jped2n=ZE@^FHXJsx>PDe5{MQ&qnWMy)w27m4V0000< KMNUMnLSTXjAhpE+ literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/SmallEnemy/36.png b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/36.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc09b99188c19e1f49e80a60a690f67e0c62b31 GIT binary patch literal 1981 zcmV;u2SWIXP)WrE zsTQ$UTLvrz2HOGx3>OwZza-^OuWxbAKor|#t(+>#OQSHd+`pAgmh^fkoVHIIH$$oN<*>2<`$8pPgH zqLX;O5;49C?&LMm*Fo|EV)Z|wtV(__dIYh5#0d8};je=1PJHv(HjTZ5a5HT6a6h*& zW0v6iZ#(+=PV^no_eJku#_j>(0ptyTU`;cZ;#b1e6*P%{jSSD#_Q9VIfn<{DYOHB! zKf6TB5yRsk^$yObgnkL%{vp(=`*T137be ze+iCLqDDo3LhR1=9%>phjQ42OZ=VD40S{M}G{SvCcoMF{YsXOu{I2@svp8-$GQk*L ze-y5y7ydd1qDpcko$s$k#_QUDqSePI@p)44`TgrztBmkXAUvHRIZ9?TGB)1f3Bo6{ zHGq@_2a);O2gBV5L9A6ge*~X%2C+MW+D@CO-dP%XP^>q?3n0_*wL02_HD?mXX@56R`>A};Of|xNK=?FblV*ywAmA2=CBbRLQmvzF{k+q| zM|-UuDUh6L)4F&&T*sux`&Qv<%!m7h@N&fDzeROV;2sd@`gPcvgQT4x)9ae)tHX%N zOF52B6>0 zO0kBl!aY=Ecz)&s`YXCiAp4$&zfWLH!$!Ez2-g^;`%ZLMtM0hceIqvzTi4sPR-t$8 zUvT*0Al8T=2#g}8do}gzFJWeB?AG6P{_4?BE%J~Rb16O}JOE#-`#7EzJ%m+0hS<)S zTL)c4jMjbL=N+qmJ^XkN+(iTWOJhdp-S~YV`%h%f<8V)GnrZ6Z#94e^BfL-v*XrMH zkkpG<`-|uk$k2|0tU1KED!7zE#7_P{$|$aH9wd|CI{5jmIPVs?qZzDC>bHOM7{d5CVch)GC1xmnnSF;hT6ss_~ZoKP9OU5sxvFO$FNoeaDDxVvAh$M z!VEr%HK)tNjdZ}pd?7k)gclg$N=!3|)ZaB;chpGsBi2sgaTJ2S9c+)|@lQO9DoCff7Cr7qa4r*~jrE{VbZy!!_JbR1@5T-s99=0-qrR z%(l6%oBO|`SkoppI<>c!Z)9b1s0M%T P00000NkvXXu0mjfVF=l! literal 0 HcmV?d00001 diff --git a/tutorial/11_MutilScene/assets/sprites/SmallEnemy/index.json b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/index.json new file mode 100644 index 00000000..f9a0a7c4 --- /dev/null +++ b/tutorial/11_MutilScene/assets/sprites/SmallEnemy/index.json @@ -0,0 +1,57 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "normal", + "path": "32.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-0", + "path": "33.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-1", + "path": "34.png", + "x": 50, + "y": 44 + }, + { + "bitmapResolution": 2, + "name": "die-2", + "path": "35.png", + "x": 56, + "y": 50 + }, + { + "bitmapResolution": 2, + "name": "die-3", + "path": "36.png", + "x": 44, + "y": 38 + } + ], + "costumeIndex": 0, + "fAnimations": { + "die": { + "onStart":{ + "play": "explode" + }, + "duration": 0.2, + "from": "die-0", + "to": "die-3" + } + }, + "heading": 90, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": -58, + "y": -179 +} \ No newline at end of file diff --git a/tutorial/11_MutilScene/main.spx b/tutorial/11_MutilScene/main.spx new file mode 100644 index 00000000..2fe990fc --- /dev/null +++ b/tutorial/11_MutilScene/main.spx @@ -0,0 +1,3 @@ +var ( + explode Sound +) diff --git a/tutorial/12-AnimBinding/Bullet.spx b/tutorial/12-AnimBinding/Bullet.spx new file mode 100644 index 00000000..5e9b2746 --- /dev/null +++ b/tutorial/12-AnimBinding/Bullet.spx @@ -0,0 +1,4 @@ +onTouched => { + destroy +} + diff --git a/tutorial/12-AnimBinding/SmallEnemy.spx b/tutorial/12-AnimBinding/SmallEnemy.spx new file mode 100644 index 00000000..ae497854 --- /dev/null +++ b/tutorial/12-AnimBinding/SmallEnemy.spx @@ -0,0 +1,14 @@ +onStart => { + clone +} + +onCloned => { + setXYpos 0,0 + show + for { + wait 1 + step 10 + } +} + + diff --git a/tutorial/12-AnimBinding/assets/1.png b/tutorial/12-AnimBinding/assets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e6e964c1c5014e7ab35a96ff5d6848064a374b GIT binary patch literal 12663 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 W4SBLLb`p3|33dW;oPPAu?f(VzjZ{Pc literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/index.json b/tutorial/12-AnimBinding/assets/index.json new file mode 100644 index 00000000..cdc1fc01 --- /dev/null +++ b/tutorial/12-AnimBinding/assets/index.json @@ -0,0 +1,12 @@ +{ + "backdrops": [ + { + "bitmapResolution": 2, + "name": "backdrop1", + "path": "1.png" + } + ], + "zorder": [ + "SmallEnemy" + ] +} \ No newline at end of file diff --git a/tutorial/12-AnimBinding/assets/sounds/explode/1.wav b/tutorial/12-AnimBinding/assets/sounds/explode/1.wav new file mode 100644 index 0000000000000000000000000000000000000000..3835c4d8ccf531d5ccfb802f9f0d154969dd5d5d GIT binary patch literal 9276 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 literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sounds/explode/index.json b/tutorial/12-AnimBinding/assets/sounds/explode/index.json new file mode 100644 index 00000000..af4acf82 --- /dev/null +++ b/tutorial/12-AnimBinding/assets/sounds/explode/index.json @@ -0,0 +1,3 @@ +{ + "path": "1.wav" +} \ No newline at end of file diff --git a/tutorial/12-AnimBinding/assets/sprites/Bullet/30.png b/tutorial/12-AnimBinding/assets/sprites/Bullet/30.png new file mode 100644 index 0000000000000000000000000000000000000000..86001818326f52b89dcf770ce15f3ea7ee419cdb GIT binary patch literal 803 zcmV+;1Kj+HP)<00089NklT!Olt-{!FYO76eNXQp*PNlje?QGS9{re8>fR-`6B z#Vjm9g;QW9S#^@{;!5ChriHc;BMoRd|PPhkIOLBZUeov|+_{l9sK`QE4p_sEwq<#G7 zz$@WV(g%ro3m*j_)d^yl3(O0>Cg%4)TP6y;3WhPVVjPeNe+udz1YyRc(F*2i_)N%M zwzHP5^OwIO8}b;(45V4S$=O=MJcF1O=>=%8VVTHeO?L8WWP_colU1%Qs7T>2$1Jdq z6xU|UGLc(qaE;+A@<;HGLTtnU1WxG)6SdjVUDDBU+gWq^$d;p)80iOMp!#KU7$iZ+zN*_M5_9;{$Z_s~DQV=s zM98u!cJN*hrih_*(KQNDwM-;EkmNCXb>M&`ccxAudcImXE=*b zLH6c8zcCp484}gKwfqEU#d(~}ghI7@5<9J)<$dtQum5(c<(TES(5m$;_bKc)-LSi} zg?4!T2GSJg{YW~ne*gdgEp$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1jX>DO= hWiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1kRKZ<_!B literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sprites/Bullet/index.json b/tutorial/12-AnimBinding/assets/sprites/Bullet/index.json new file mode 100644 index 00000000..1b1dca06 --- /dev/null +++ b/tutorial/12-AnimBinding/assets/sprites/Bullet/index.json @@ -0,0 +1,20 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "bullet", + "path": "30.png", + "faceRight": 90, + "x": 8, + "y": 20 + } + ], + "costumeIndex": 0, + "heading": 0, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": 230, + "y": 185 +} \ No newline at end of file diff --git a/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/32.png b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/32.png new file mode 100644 index 0000000000000000000000000000000000000000..0404db76eda51986336515594b2f289800e27346 GIT binary patch literal 3441 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 Ts0M%T00000NkvXXu0mjfV@{g# literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/33.png b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/33.png new file mode 100644 index 0000000000000000000000000000000000000000..27dffd6643c0aa5625e8741e66c4877b064bed30 GIT binary patch literal 3959 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 Rf9?PP002ovPDHLkV1g@+xDx;X literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/34.png b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/34.png new file mode 100644 index 0000000000000000000000000000000000000000..ad983dff1b868943b588d8686484c0b255077c07 GIT binary patch literal 4388 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 KMNUMnLSTXjAhpE+ literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/36.png b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/36.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc09b99188c19e1f49e80a60a690f67e0c62b31 GIT binary patch literal 1981 zcmV;u2SWIXP)WrE zsTQ$UTLvrz2HOGx3>OwZza-^OuWxbAKor|#t(+>#OQSHd+`pAgmh^fkoVHIIH$$oN<*>2<`$8pPgH zqLX;O5;49C?&LMm*Fo|EV)Z|wtV(__dIYh5#0d8};je=1PJHv(HjTZ5a5HT6a6h*& zW0v6iZ#(+=PV^no_eJku#_j>(0ptyTU`;cZ;#b1e6*P%{jSSD#_Q9VIfn<{DYOHB! zKf6TB5yRsk^$yObgnkL%{vp(=`*T137be ze+iCLqDDo3LhR1=9%>phjQ42OZ=VD40S{M}G{SvCcoMF{YsXOu{I2@svp8-$GQk*L ze-y5y7ydd1qDpcko$s$k#_QUDqSePI@p)44`TgrztBmkXAUvHRIZ9?TGB)1f3Bo6{ zHGq@_2a);O2gBV5L9A6ge*~X%2C+MW+D@CO-dP%XP^>q?3n0_*wL02_HD?mXX@56R`>A};Of|xNK=?FblV*ywAmA2=CBbRLQmvzF{k+q| zM|-UuDUh6L)4F&&T*sux`&Qv<%!m7h@N&fDzeROV;2sd@`gPcvgQT4x)9ae)tHX%N zOF52B6>0 zO0kBl!aY=Ecz)&s`YXCiAp4$&zfWLH!$!Ez2-g^;`%ZLMtM0hceIqvzTi4sPR-t$8 zUvT*0Al8T=2#g}8do}gzFJWeB?AG6P{_4?BE%J~Rb16O}JOE#-`#7EzJ%m+0hS<)S zTL)c4jMjbL=N+qmJ^XkN+(iTWOJhdp-S~YV`%h%f<8V)GnrZ6Z#94e^BfL-v*XrMH zkkpG<`-|uk$k2|0tU1KED!7zE#7_P{$|$aH9wd|CI{5jmIPVs?qZzDC>bHOM7{d5CVch)GC1xmnnSF;hT6ss_~ZoKP9OU5sxvFO$FNoeaDDxVvAh$M z!VEr%HK)tNjdZ}pd?7k)gclg$N=!3|)ZaB;chpGsBi2sgaTJ2S9c+)|@lQO9DoCff7Cr7qa4r*~jrE{VbZy!!_JbR1@5T-s99=0-qrR z%(l6%oBO|`SkoppI<>c!Z)9b1s0M%T P00000NkvXXu0mjfVF=l! literal 0 HcmV?d00001 diff --git a/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/index.json b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/index.json new file mode 100644 index 00000000..6b33c8e6 --- /dev/null +++ b/tutorial/12-AnimBinding/assets/sprites/SmallEnemy/index.json @@ -0,0 +1,93 @@ +{ + "costumes": [ + { + "bitmapResolution": 2, + "name": "normal", + "path": "32.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-0", + "path": "33.png", + "x": 50, + "y": 36 + }, + { + "bitmapResolution": 2, + "name": "die-1", + "path": "34.png", + "x": 50, + "y": 44 + }, + { + "bitmapResolution": 2, + "name": "die-2", + "path": "35.png", + "x": 56, + "y": 50 + }, + { + "bitmapResolution": 2, + "name": "die-3", + "path": "36.png", + "x": 44, + "y": 38 + }, + { + "bitmapResolution": 2, + "name": "idle-0", + "path": "36.png", + "x": 0, + "y": 38 + }, + { + "bitmapResolution": 2, + "name": "idle-1", + "path": "35.png", + "x": 0, + "y": 50 + }, + { + "bitmapResolution": 2, + "name": "idle-2", + "path": "34.png", + "x": 0, + "y": 44 + }, + { + "bitmapResolution": 2, + "name": "idle-3", + "path": "33.png", + "x": 0, + "y": 36 + } + ], + "costumeIndex": 0, + "fAnimations": { + "idle": { + "onStart":{ + "play": "explode" + }, + "duration": 0.2, + "frameFrom": "idle-0", + "frameTo": "idle-3", + "frameFps": 4, + "from": 0, + "to": 1, + "anitype": 1 + } + }, + "animBindings": { + "step":"idle" + }, + "defaultAnimation":"die", + "heading": 90, + "isDraggable": false, + "rotationStyle": "normal", + "size": 0.65, + "visible": false, + "x": -58, + "y": -179 +} \ No newline at end of file diff --git a/tutorial/12-AnimBinding/main.spx b/tutorial/12-AnimBinding/main.spx new file mode 100644 index 00000000..2fe990fc --- /dev/null +++ b/tutorial/12-AnimBinding/main.spx @@ -0,0 +1,3 @@ +var ( + explode Sound +) diff --git a/tutorial/bug_anim.zip b/tutorial/bug_anim.zip new file mode 100644 index 0000000000000000000000000000000000000000..c3c46de4c947bee740ef8894759815219529c2a0 GIT binary patch literal 46631 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 { + say "animate fight", 0.3 + animate "fight" +} + +onKey KeyDown, => { + say "die", 0.3 + die +} + +onKey KeyLeft, => { + say "step left" + setRotationStyle LeftRight + turnTo Left + step 50 +} + +onKey KeyRight, => { + say "step right" + setRotationStyle LeftRight + turnTo Right + step 50 +} diff --git a/tutorial/bug_anim/assets/backdrop.png b/tutorial/bug_anim/assets/backdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..b395ac94c246fd4de8368a156f92010baa2abe21 GIT binary patch literal 1264 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|?860dtk$!Ux1qKF|I!_nJkcwMxuUaxPFmN0( zX#1Q$^EgYe(n9acs~H-?Co(YbNPv(*0tg*wU<4utW;PIlNQ`7TNT6U3mysa{Nf791 z0^;|PBB#oLk|B^i50!vtmJuk2uar2)@R^NsZt;VgUBCiKx5PD~Bsf2^a0 B;rIXm literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/index.json b/tutorial/bug_anim/assets/index.json new file mode 100644 index 00000000..86dcdce4 --- /dev/null +++ b/tutorial/bug_anim/assets/index.json @@ -0,0 +1,25 @@ +{ + "backdrops": [ + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "backdrop", + "path": "backdrop.png" + } + ], + "backdropIndex": 0, + "map": { + "width": 480, + "height": 360, + "mode": "fillRatio" + }, + "run": { + "width": 480, + "height": 360 + }, + "zorder": [ + "Fighter" + ] +} \ No newline at end of file diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-1.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-1.png new file mode 100644 index 0000000000000000000000000000000000000000..df6ed42b60fdc3b6d6ea0359bb93a4400b81792e GIT binary patch literal 2034 zcmc(g`#;l*AIIOHZMGTVTcI;zI_p9uIl8%S(M5{V#3Q8@LUNZ|+U9mpI+i-$721?U zsN_;|IVP9B&6lkl$1QCRQfO-=6SJ@LSA2hXy&>#m6bfT ze*67Re%=#DJi|Jx&dlX;x!F&CG<8T1C)CwXsLGg)a|xAp>1VCccHM7(j>AEg<3DI} z%{AJ_S^!xA{5VB80Nobd-ja?682QP<$lefOjgTe(It;*%!)B#x;{e)!q1z_z2C(2F zBf~Ao|7F4pM~dqDU@Ux&2lXS4?OcCj>)y*!rmSoZrva(SF3%eIVWID(-;K{;;ZQ_2 zp-b*Q#-Y&fufH7*dM_Z+lyar{rSGq#*V8m==y4@S$vK7s zVsBTuy%){l$P`gS7^@BEi$=V9Ps>!pSxs+(bR7#Gt7Yw!dwcN=AC_xcxngS&$;PE> zDJO-)XlzStN#`VESY9RyaYq3QZ6)u#!)Uij62r>LB}-VuisWO>mfQQ#5@z>e7Nrn< za2mVn)%tNkt1xZ$b$5i)?h400xXrvEEdY~?l<2BDs(RlGI&6jlntUz=Fc* zNZWB~n$RI)P8^fY%qGQ+Rf_FscQ*e{Jw}ZhyBS%n&A#SEn|t$`7vsiF7;Jp8@Got? zr_9JS-&Zd3R$D!vcXH;z&52Xh=Zq*%)nVn`(maNJl`M0>SumR|J?1@c*l@Bkt&ZWr zhX;5ePYr5zyt{)Y;A@4&ECB1murJs3E~9PrOM=mQt)61BpMgZ|97ntqg}_m7+Fe`H zh+uro2yNn>tSjHT2fD2>V1p?AbXqU#ZTL?qC+Xh4czIBGO_j!Io^9J4zB=^Bt@!5& zg3FDJ{e$)XF3rGl{azgrc5*9_ZPyp81`I;K%z6&JT`_q7G7>L*QN7DOyif~F8_It( z!{dRG`ri(x%^?(BAlrK+_8&x8txZzNF_k>{fY$BXC^od13vp4pG|7 z3It1UkW$!G#sG_=(vV3@QxMgR`ms+_To+$0B%!N|M5)46Rm{3AHUOLSsUaE?byB}W zwg{Ox#S-4|4>p^o{Yn`}yVR)GVEksD?F86xaVR9;2(mc)qO{o7`UMl?)EWHa5Iz~s z+OR_?1Z`-K;$$-G1WPTtl%CG~1!?NwCEfOZRUbwka-k6Vv-Re3D?NT6zV^)H%@^l)(yWq(&j~DsvzM?Podvpnfqb|B|PqEt229#ai z%^uoG=b+-N!A^&%rP^;b0vRTn8;Fv$`ntuJeBQ>aQ0yA22r6Mes`E`j==ze8Ps*i- zYnRr;ZRtelgEBdRMJ-q|M(NlL^O#Rh7-_)%oO3a_4u5*7BKif;V{&T}{85sB4;oL8 zpYpcjMN6&a^W;%fAmVI#x0C9g2o|~6yF840EzqsrdTd2Ig8LVTB2}T96)yM!@8U^i zA*$e#Y2Un_Xf^9kb&~qicvC#AY#;!c9Hf_?+T)O^3x;$(!3LiyO%@F=LSdby(HemS z$}0JG^~2?YAmhI#d0eq=K6z19gdTx%7g_ioHFaKeC+ z$z-s|RQ$ex$zmQ+wVy?V6Xsgnxv)V?MU0zfYNgqEozZ|#yN!rx+ulbF*wufTyb-s> z9!)Cqex*|tZjWmztQqKt6vyK-5K_t*A=@KTux9`p>(kX64<$R!DExaGYkfJw&v!O+ za=%?*Y7rB;VdiHZaEQ~#-{k%ZRk&TD5wd&-PkbN6cDeQC2KW$c=Iv>~@9EGzye@QT zs%dpD@ysw-MvY?k94^e?yk~wUoPHtsYd!Yioty>#+ TYG}xoZxfvNxjH@BOHckE!U>nx literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-2.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3acc6c0918e9e42f3c153a5877bf1cae3e7bd5a6 GIT binary patch literal 2078 zcmd6o`#;nB1IORnXPe8Ixg1Fjb177FiwcubZk;f?5wR{Sg%)#(u+OM$)yX8+QtK;8 zHrn>zC(`uh-+np#=D7svD{U05tu4w*@aJ z{I66o%l>A|ftKY!FoJzN!NXRgQ2)seE;Cd2mRXz^4#tqM_EDMk4X~wFsBNajFAten1DjpMwo%nKEu=AW4Jh0?3va!% z;^w^_RdfDbANPOX;M$?+x!2O#x<^?#r|6lxd-v$G;ro@B$bmB>v6HQUf@2}5z$yox z>c0vZ0FgN_O+ExL@RX{R$!ljA!6P9>*>v3hE%L}^iN#p>mHfn81#XW@6KBpyt54u8THjO1vf^>Fm2Ar$VYdmkuaJQ`RSq;=i zblJ3NJ$m2vOm)yaBsj->^p+>T`d6Fc4vNh-B=? z_?8u~WfHY)@_(TA`^+K*w$*ezPt0fQK)g8VyDtCA5HXKN2{v4ket*xi7?nQS_ zUL-q!`~hZ)v?eSyrFK#LIa=CHcdupg<$`n)^Q%O$q&wGFn!Gp%>euaElHP0%;TY-Z zlsK4(4ww*h?c1a~14%!wyC|NWrVk%7hO2tqF1t1@^*@idda|ip=(px$anw8s@FBpy zBo?+EopTR$_IoLlxgFea17lkdbNgZBZ+Kw+SI1)vnRY4R_EsF?D=LIo@3XHr&{$!5ik>n$ewuT?5t=GYe46ggy}s0hiDYVcoIEfP4y7q5K;3 zd`fsv`lW{Wp$@)3R2$Lej>WIi{S7BLI}F)m0nlzfn6YenkNe>678C9v!1;L9U(O5>!*k$=(?-sT%?a=LRcK^BAX5*!68dK8 z;G%2!HJQw7HFdG;g0v!g<8bo1cSAGApG=PModp-q#>CHuD6|kf2eJ(nIC7G(IUJfY zrZM=8wauOR+|wYIoMw5EoAGR#b#(B79k38vWL$Jw?U0 zQb_~6)+P}MN8t{Fr&izIgjGW1pp|xD-})1x2Y+J8p)2iFe1oXM^f4rN4C%c=CO*;?uO~bDwFPM@2qpi&3 zzh(UX56{cvw*0jXZ7DqJC z_poXV=;UNz7lg(jpC}PIbb~0?ox~HSD8e(=Rt8)oPk8UJ;*k!;r`US7oQ{xjBHkf{ z2=Ww(SDh!w-CrU;4V#{>>1AoPEZP3u&|%}3{&XpWOU01!Fn{f3`mDx=q>yipBq zmWG&vX7nACo(cMwA*K^BJTl^lEBlAQf)`AX_}UzIWrU3+8tm9wuNIy~5L5;?`b0uh zWIg?jH4sRW-3I71+PvrA#NC`gOBOan%~yRi#wAXs38xw+WazN_4Z+N|;krfy_qft} zrguA;@#uEa;SO;X7Va#k4*$-x29>&GRofKnC}43aAHl`n3QbU}W)k;+Ay7@(C@b*- zw>+t&(%QDcem4AR$CT{8GtwkAm4 z?N+hB+A`gZ?K7YYNVU!y_Sgyro)lbNXEj@z3>$#7M_2kE?+9>ix>XFzTB);hwVN(?~R}Q)^6`aj(zd@i`zxE%7-;*z^D52 gz8Y2Ko?g@n_t{!^{64{W`S5|CSHQN1p480$0f08TJpcdz literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-3.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2588ac4bed66774bcaacb83ca4cb65505a6f3ae1 GIT binary patch literal 2107 zcmc&$`8(8m8~%J}Ft+%Tsa}cEK}?RNGTCA*S+c8;N?J}-Lm~_#^R*qky$7YDR75V~ zSfa+(FeoJo{_s5aPtWsQ_kG>heLb1pp3a-()#U*In_OKS zeIikud_XR!1^YMa$Ra zz05d+vsxVdHCJU&(Q+|9o>s=BT>Coj9_`h(yv|&%xOkp$pd_86_{-6`rhU6K(OgO% zLE)^?9i9FdZ;%>7BnxMOJi=9!RX(+Y2*D4biHSXi zxZFWV4NUw8)@-%>zbyGLmqOnNHVIJihbK{lE=89p%z8WP?AdtZug;EBj`p>!tm-d* zyoRC6W+E>`Ja8|tD`lw}<81-NIDHB?k4~M+ZPaBcXwF7;X;7mpzltY|O`|&faHYB# z03m7GR=tVFK(+n1Od?`Xec%f-`w-39NATL#0Dqu#9BZNv47%@CnbLl?bnI_E@Ewl0 z3hoJ%E2-_-Fq^>KVKrxgSlH z1uf9kGglhje=PxyMc+>q$?3co6R8pH`8mS0+8FCDLF{sGaINnG>JT{_*$aGlZ8ou; zhIHCk0#9TXwUB+PS5RZKr?9V(KxtijXC1jrUos_fSFtUWH+%dIQ|#>yPdQl3qt$la z8N4<-Gu>NXHg2XhpYQ?2?G>fFP3PPG@{~Ks!wp&U9yh~P_c5$k00w-#~ zk>QNPn$9GnBH(x(-vgm55&{=g;BdE`ovk_;T%a?+?P7SL+T+|ir0xp#yl>FoZKG5X z6Pa`-w`@%V8uBR238^o8A?$E&Dw+1&um*MW7jl{Vjsu+a&5u-m`7w*dKP_nCZc{4wPqf_g{C_SIzlBmN_5rHV7c~vK1#CSUj42t>LTEnG9ltv@CB2ir-piw*^ zOUPwdf&~g|>IQ+;Oxyuf{ZNLWyq;=~C<6g`wMf=uEy3Rx3@^Dp;fq5|wy30}D2W4?M$wL5G$kj(CIZ zn1O=%H_Q@SXM44l3HJ4?mPuH|Y|E9Kd3>lmu%$)GTi0d*jjaam#V(lX4_k>9BxWpP zDN!j@fkR|{%F}`E*>YL=LQ}wr%NpPEHd1w)>UJEfM^o6bD~ldt)1W1-;IV2y?G}bM z1UQ~+0MSGVz~Zctg*`(XEA^2^jOUvqNx~>UF5L)(Y}0PTB{<+)Pc&m5y;!N$zM=%z zB_t%PhVemvE=Qcfyxh?P25WUGc9h0Z{q4| z-CA^|*FS;@AjjpI_BX2=A{if^MUo~xg_F#>?)f>pP($nlwu3uHo5p{R*If`!WZ_}^ zqwcuI>0pf=8fnI3QB{5JfU1?r%RS$3hgp$4`-AACkNrn3v5MvrVy9FSr*aAdKbuRLlS%7(d}bQI z6xsB$eu!Z@5q-Y2Huq|0FzwiP($TuOF;F9oXGnn3nWJ?p_+D ssySVShYLIo8ja2MyzB4R+@OfG;yAAK75x8jl5YUG9`tmqwhvDJ2XVB;WdHyG literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-4.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-4.png new file mode 100644 index 0000000000000000000000000000000000000000..43a3942341140f94f5ace57a7590ba73f440bc7d GIT binary patch literal 2110 zcmc&$`8U-2AAWykH@2}vGML+DDKaz**rGCX0iGgxpc^Pt96b!3t4*(Tf#Ny_+KsK zG&K&Bp7C6T1#ms^;$k193HUk${bp+zL9#`@e&da$f%IT%oMaZ@;YB5!YJeUUA{0S< zei_mTyxvQ)O}OxX5xK=z#k{$1bh2$zdL4X?jQ(Su6`*ObWp7+}^Hvi>^;9uBw!Jp1 zr9P>QmmGcqq7NzEPxWXlkpdLRNKC0zCERu!KMC)NE9udR7PXf%(6@D2|;+D~G4BA4!j=nDCfEeFp0#&qTM9ykE1x!|i1O+`;Ar{OHPZ-eJxs zDC9GxRE7?uiJg}X?%PAtzu8nK+uLDeu_p z-SzKd!(G8G{^a1KHJ)^>9Xlylxyk66D$c_)TY8%@IRECe-m0f2vw~_##u@^@f;}RPYezHe~{?S>EV^HlaRGc~EJ9{psbBLs<>9MbV-LQW&pZ zILFjwB_ECpcL{{htf~^WEsOQx$&5b4uSFS;ABzI_FDQX1gmgRM-oSRH+*5AI#BBC> z;Db;@Z6ocArBk>%v(LJDhViz+L*Jt_2t(f<}1GwN9oKu3(8|>6O(J7HyV_B!8xyVR}om`jt zU4Itr)vBHw=C+L{tv0UAw08APBxu9pwZ7-3tcd0K$OIF>+(qr{6_PAs!0s<{2DnS6 z;((_-XS9XFnDhL)S*!t=3qONZ@Kn`On+dI1Q1`uPiaP`^Agc1y($B*D4M+Ve#Z;6h&uN8bO<}ydbCivuJ^T%VlIHPwaiUH2;n^s z&Bl`2Wq#NtKagnGkI{s8F3h#ce8htO68Qi`-DePr+^|M58!p#^u}jU0^j0nwjQ3)4 z>uOV;ou(G9bBQDil4uy-W#{Jzg_yMK2p8PfWf3=YIcRe~rHG9S5MIuh8a|cfy~9&I z`r}_v(BO+%^ZXpsX8x=0)p21g_u4Df7Ms)kSio12%E?1hPF?Zq)G=4{$ArsnwTMJ0ZDJ| zJ`XA}`w!A;@^m#~s7Gwf7ecrz21u4G9Zh<4Ml`lL6e9D7v!1JbM4lKPK_sp`V2;c$ zWP4GXV*PZ-q;#hkQ+jxmf71FcRIVcRrsRenDGWHp?MD_()ByzA`GL;`l%JacYz^0X$Z67hMM=+(6E$ieJta?-^BOtGs)jgmP4Y zlew5HgO27jvA{A4P@KCF?)@ux%hYE`1dudS_DTCx)#a1AR)YgFX?*>vdCB}?l4mjw zs3(1W>)2_a-NIO*IrRgoMS;3HZd#6lkJ*;m)T#j#q?a*}pj`L_=B)BRHl!$=A>+-!igD;p_tNgPi8%;0WYXeTgY|z*E=m z)d!!Q1I?1&Jg5YD95d+IqXOmPQ)=PAEQCZ78a5jjG!V7Z*ceVRq9MlPCGi<}#xRKo zv!u*=2ypr>&<{UR9v#!8m+CdGwa?t7{+6PZE-kCSPO~#K$0eptXS??26cgnRKo{%N zV7}Uz-0}F+8$B}Nkk@fi-PG9rq5XKbsvuR+wrxoP;IyJH=Uwi##OYV`>HqMl1$C|J zN>xX%AN<^8JQ2-U1}w{Bc@VF$G9sgEb*4l6l_)e`IsDJUb7p>(f{uiT!k8yS#BP1x zmiLX(^Wi(_*d?K5rAu5P)1-58w-%s@-O-2Jx^(Amwmx0*QW*<{tc=ctMwjb+;K|B8 yG(O8dgvGwiizCd*5gg@zcF@AK*V7k71`ofuG@V!IuGlC9!1;))eZ?Vq>VE+shrdt& literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-5.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_default_idle-5.png new file mode 100644 index 0000000000000000000000000000000000000000..91b91d8ea2a3a979362c1a1e097977cf993294b1 GIT binary patch literal 2087 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 Mv%}xB)}6)vFAExlg8%>k literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_dying_dead-1.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_dying_dead-1.png new file mode 100644 index 0000000000000000000000000000000000000000..be0273d57af5c7a5421436ae48a225477a0a1ad4 GIT binary patch literal 1598 zcmd_r`#aNn00;2Tcblx0+L05{lSyv5ta4v2Ye$buZaF&0wM2y^!iw2BtKUY;P&sH1wdul-Q|csIc&Z{@IWI#HCfMVrFkD;VU`puKcgrJ&d6efnAtw$JEq}*SxfyHZ5o4OonT+O!@`QJ-j*QT zgsoy|AlkPUk~jA%6Q_wdFs1zuMf{{mF1t=vlpUsaQ)SJWaI}*r;?*NX?fB}8B4zw- zjwxy<>ahV11G)5Z`sr|jITrrIzdMPPvY7upF;M!&en*5u zcgoX26)=>J;2T#rih7vJ=}!d-B2kbbF&fD=iE>v=<6 zQcWJaYITWg-aB_e-}${fbyjh_PuC1k`goRMeVX^Cnavt*eXeDzc?6YC)Hx*U^@5c_ v%_nPw(O)0}0? zwe693vb0StO(@GqOtK5b(`h z#X{yngy!mfKDuP#DV%4f?6D6&F6|HTUcwH$LQ8aUrO^=fWxJY<2_AdN(Cs^J%|7B{ zWx9Uk!Q%Wbow$Z`AnR0Dv*D0I7tpe&(}>G4hnQdu3kFUQ!~`##LAe(Be@iI`4Uw$Q z#?4i%ywdvwI!HWV2ybsnzgB@!*G2fpn`I=7?6ir;SUo%%8!t}#^C0@F-9B7O?XU8s zU0RoJPR{T-Cp>-C&@{0{`|a;l%T)A$2ibcyGofhM8@RlBTVIbe zoWUPx)k*?Wi7$_x+_YtS;BJqw+ zCJE1G^sZuRxwi5}L>OYoH9SM|)i=kZrY-(sagz#bG#m4G_k;wyY(r0Ov`ijq@a1`+ zZ0s-iJScNhDPPP4pULt-R)ZkqeQj|!MH3tgph zWyb^hvH8gRrVXSU!bcpF*V;>yA-Sx8NO~b4?-jde4Di73rAaVjY7GX$AzY?V6xFX| zICc4b0RmGuv)_pcs##F)>NYdA17WOrwiBr|J27{G2!|n+14BZ>(n;0V3x3$wmI_}m zPH4}5d08@UI%Zl#C-C(?$i-Bbk8frzPi>=Os$VTDE#bMr_ZF1 zihCqmE!EaO_XQQ*W7W&jQPm-Z{K;GfqJts~qP$1Z?IQQDnzCJAyC|y-nVib{A-1>3&r9huP h&b^&z_BMsQlW2B`&UK`Y1U@`S{aSW-5 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 literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-3.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e404487cd4abe17b4c03d64644076c99153580 GIT binary patch literal 1936 zcmchY`#;nB1IOQ=ZEWT?r$xkJJ7m5bb}HZGGWYx4$?dqUB1&$#%VnGT67@~;V1(@m zol+>dXB%>)3`Irmat+Nyn9TA0C%!+tUeDiNKfazfT%4>W(F$k)fTXRBh1&rs{|id= zpgT!t-y8sncC$7E)qRRf03hvbElkfO_^%e5W-3}@{}XxvM`QM=q5Nllol&c;#Uo^l z2&!4?_h02w61rb+-FHlj3UbPeOC6fYPpY8GuZq(c*_of-?}}duZQ``AQcAVE4*OKkYUpZEc2C zNNGw^_Z0plD$x#MEnx$hzM6@GY;^_Hkh5K34TK)V>D>q@hc7aZ4Wd;j_Wi;E_g1*I z9N{%IAUtc;>A;Km?K<-asBIc7i$APP`US)k>DcOqzvTU5XoUx=6&i^|ZT>y{?J@iD z92{aq2U4KiD)hiy`*?lw!RSWNRPED16!3fCps>1-#U|+jGZj#d3n_4Q$u@4&+AcN) zi@EC?pJrH-jSCTn12lAvPPjMSmVQ9ma2aOB1*IKv2!#Xei$-0wxSqsGUr~JgIRR)D|;eE-7nVGr$ zq561__ovvrzj*uG^;GKUiq7AV13F5>KRo0U zP**3su;g$KZLNU#igIG7@C<=S2E#NEvtQrnU(`BUz$lRe__?%=@ZJheF~4E4no5e? z(6g5#l%bxB=w_QmQVo0-Xpv~pj-7iCaGW3}SEMN`AW$ZxRD9|gyI>2|Am5$##^muq;tZt|DGFuR1v_w=e2l`f_2c(QbDWs2mr+7u`4!9XOs` z;>)^w)CDn}3jrs2uAjA}x!Y;yOT?#L0d2{Cd+RIhsPT6#0LeKwSU-maA&H9bE}i|} zO#uR?uV<>^=*eiR3UGO*_xRSJ&=2EcSt0d6b~0vYUIJDCL6jnH>gpdKg~PN_^B6#J z?1h)j=8w&a4mn@ldr0PIVCWv>o2jABjL6h-5lVGqQ_ZS31PXOafJL;J0%nl3ZrT2< zHz+^-yTctO+ycgYBjG62qbmU{3O}5<-Vq$;W3H%z;F$31WLPJG&G*};jqf2NVAJwi z`iWGp-MpbGeW?Z~ z5&ItG$aOoh;avXrwX$X$ua_~ET-8x_OxEU+VG$8+ zahD&fMr$vehF6ak*nN_{izEC@X(*wJ0Z&vGl9T!)`*--uw8eJojWw4MR>fU~3~O7*LEOLzF#9mFKB-Xa2nmoV0UJfWw!knIYnP zx*xHz1A-%~y$Rn(VVV!mZ-g#0hr> zNpn?yX}csDxu^n&FC(Fji2IEI5R$QZqEDnu5I~d#sN$4d+^e_Hxf?tL#~q0R_Z_bA z9M8i{;;3#6nb~>pv`Y@WD;jHmn*c4=ejPnkSOqT^MO`BP0ngng>UTHvp9;y{c7xxn zOpN|4!sp6INY_XMR^jawdr6`;qHlypW2SFMFS7x$niCeUE|;3JYOKoAfd>unm+7L0dX;=8_x+XSdb1dHBOH%@85=<84YZ5Esd3O!Ibt+vj-dXEj z35bKR5Az2v$OAnbXF6Jt`V4AS7m`OJL>oBxHV2H zqg&!u=N2!3pK87v@ZVEbi@F({e<8@92a5EgH_&+XKJ2-fob*Ku$a_>ex?23~r19IvfK=&2AsNL~RZ5hM9t$OMSk dRzK7-m8R(yT5YN<$vIFgu(fous5T?h{sGk`X8`~J literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-4.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_fight_attack_1-4.png new file mode 100644 index 0000000000000000000000000000000000000000..3544efc8032baf84054f90dbefefa044c109dd56 GIT binary patch literal 1899 zcmcgr`8(A60{(o>j3I+@vNcTB(UgN~>|^2jdR z-w+W#;0`nYo&$lRU2H5s&3nZ~0I(!GOPX7pFZYpSrlOT}*A)$>vTc;;(f?|FA=TBX zqNPm9&1W5c&@9R)J^E9Ho!v597z5+FqBLFK^yWiH@2IBY@logR-hPmlI&&9~zhkIX z+vw-&>N?@`(aUsbe{!U7d3o4vBw?zyjp6<#KkIFUG3xNg4{C8JP;ln&U~4$Cq>=;x z1wn8;KLP-z397r}CJKPrBTh%n6agUjBWtUl0f6I$3vNnc0qCYMO|BaP;8X(5e(r$& zj~4D!&gIiuw=R0ja+0f4#2Y}~=&N-K#nf02og%o9#+QCV0Je0`;rs-pli{zM!+QNM zsjT`@q-)ODrd!B>dw*8ktu#xhOXci^-q|f?Mi4E^`Og(O!qg&JG~^Sr)#Ot_wT*#f zBsg1+l;S|fAW2b(2O=VatQ=)Z%~0U(To04r`6X7WL=6IIgSw29D!dn}I;_G!%IG5R zv>{ofugEGNY-TkiZ_^|jAw}XjjclWp|Be<>oz9I~*oWB(j z8n>=Ll{ubo?uEWznXJNFj18Y0e>!AA1>2+YU}orYmFbQo;!TYWGDGpW70G=cM@D)* zlgIVV_jbH6X~X}~nS{JQ#T}==+%YX)yu2A?P@-p}o%EYo;)0zRNAt?k9RIJvi`DE4 zs)fcR&)+GNQjZv6^Ck$UvefSKPl623(jtY4c_lwI&>Ym<4V$RoJm$46lqpQTiTtHr zEK^%3kv37D=RI9o9bH`qA%96{zktqgdfsf7};)zdKh$!2K{UIfs+^Qi&# zoh_B6P2AkX{fzxWKZ*$9-N*vil00KR+7!LeQ9iWdJISJJSoxbBe>+fz85V|L&U5o) z8U@>vS>0M9sfCT&4=4)#eMYGpu7e?Vzwr8`nyTMzUyAUbu3&o0x-IAFqR(q4i7c3| zumiqHQ#RovNs;UX9I`EtWo%{-`5<2uB=eSLqQ^6dnw62epcf38e|!8 z`i-;OtWxo8&g!o%MZ3?9#C6bC;$ZQ^24567X%uE0Q=uMe0-f>>hau#YM}%yW9M~{) z++897!`@(|&j(X|xlS(!2%oxhuNe)H^p+<-A*_9N zBN4fP9qoji+Q$htuE7!mA%bf`dqm0PuCk~OvO6@efndR%k^lvmyDn&41+dqR8-gU> z`zMkQW0Utfa|(V48P5Jg8_2hD!qn=)YNzr$Ggd`^a60TF?qr%RmNH<52LT% zR?^1(iZ94f3AU&|rSnz&LYL{REDTDd$OFZ(#&&%oH1xe6=+c;PFSb@i*c5_?w#EmOBT!?U6VEg#XhhJDB#3`{M6pe&;U&TA`L5LI)ZI$K71IWgX!3Kfj zu^1-9!1Cr5ncNioedPDLs6^F}hqCb-53dU?B*9;Urw544$m;hm_oJ=4?C3S|51UG- z^IKV7ma>SLJ**%SfxIq%x)sRYmSg0s#1;S~gIVntg8_Lb&bMuKHY^#0hGQj{YZ;sV z$&5JGJ_JsBSBs=r<-z-Du!YI?FL9tYC~c2*9SH5T;L F{{dEjQ|+GLtKiW0znZH3!~Vn5Eg-v?ZFU4 z9Bg_l#>y5rZgl}WpwI*)!bFw=!4ZitAdAT2AP^U1k)+H&(GU0DZ}-DJ=iYlRaKFIP z+{PRLEcfj8J-DjGZ=jm4ay>a8Td_m0fmI0Hz^(eEC5s5pPQN<=F)@b7OTr z2P!JFcgCHNthFj;|3t}VU(VZdU^7GFs$3V8HcV>kl`8+S`Fl=Gj@2ObBH3ikngQBN zzs(AEpVg*(^TGHS?Z4d9mqShmfAb_=YaHrK{16oIy4a{Px_=DmjAFVeT()OlD1Agh zfsP<-7`6sR865|;3vBRW5kQ;(kF*_tfEH2~5&?x$WNvN>$lyU59(jsTA;nbPe1n9+ z9E~^|K>2?e4DL`z2l;<-F^(lVL#s?>J=_Pr)B16@pq5)~>}m@$lSkSHSk~Q}u|rAh z`nmT>)U&&C*q$MrJG&Gv{=yD&DmO6nEdIG@Gzr0JQ9=G>)H-gS zXQP@SW>5`DG0$^3a{NpcpW2=Tr)DZ9(=~D}M#LjGH5(o3`^gArEm6F1`l9Z(X}3xK zG~xiZFFE(A8*LktYgO{B=Ic>}3jaGq>v*Ebcdl0{fmA9k(jGM|h8H!4uDep41-|y@ zlZeE3EfsxE8PxJKjpj%E#{T#^1OGQfTL-Q=q!%fbE?XIGPW;r|g_VLhG7_A&o~~&6 zb*7A3oX?wWSXh2Az3%bTy9pTaO8%ZNl)Zo-lVVOhMD?29%wrRa_vfZ~x+bY8^VTuE zbmi-v#5F&;)agM+z;R{Wqp3{+IW5|TwO(%Tcaw+zdH;jt?WZrhd#l`?l$4vxL}#4a zhk-l?$tF-)$02yk;~NzduR96^`_(F34?Q8rV<_h>J|!4B znqFiBvz{S4BrG%QcJ3ZWnVDDku5`r;@l{4V_k+lfPDY0@km6EreP7G(+g$`@#YooZ z?Bb0rl-)@8_Cr`5Inf;NCq-ZOlcb+{&RVe8`674iQO71PE2jbl?XYF{+akS$MC6GY z-iBB;F2?^5Qig?K-L+{&n1n)@{)LaNCcOb!50lecDTh7zvkdDv(dr4GIonGHNHv`q zwhu0mm1-_cvlF+4Z^OKEXE!Rh`2A_Uq@R>%g4@fg5)pwd-yd41jWf5aM@pA3=(dT4 z)Ew~@%UVYQ5`VGH0sLTj1BAm>vzpb?fIRCwbYI6B)=LhfzG>F|DR{soy~CJ;WIDo@;xlX5RpbFwECm1C;yybE7)+uGXYQ0& z51Bg16hn4Sy+|%9_GMIgro^VKjJj@{IY%oguS8lMUp=GHpT*AR2SD!6)g9W?aj@k< z#ILsUhj)2lr4D{W7Lr$>M6RZSJN{}BSo0_CdkP5)xHIQ8QxQxwc>YlT8D||4S|@n+ zQ`clobL`TFkLbK}@E^cDD>u?4HUYfsMyc@K<99<^*Y6F3Wp=caJXyc-ZnB4+q3)C8 z*ah(v9n;9|p;aa_5j7g4UZRe!%Vuh4U4rgotPVJ2vO?suFNv_$t5DguFa;}$!-dro zP&e`lWI#$W=hOhfuN_II4TkkHGw z3cc*J#hO}dT6NMmpb;)Jx*7zO(31tf@b-TtjrTckff3^ag%RlM)+->(U{BE8DL9vO z5AvRKNmB36|5~th0{p8*-U6UP+NMb*x#pQsU$}96F9;E7CA!q_ZL9Vy4|fB^$}7Q) zXk+bDOJtXp+Io=ZE6MWaYpZ+5hNWKPbx-hJmLFx#Li(GbE=!dS8wSH8uXWXLfN9n) zLxg&7TmS5znP{rfJDGBC>PGtn6>luA8t7ZfG@Je8k!~}oE_q7X)sF{?12xG{NSt#h zkzX}?%I+v5OvrO>%IBt))D{-ClXy2R!F;f|XH5ho`+q}( B%boxL literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-2.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c50f81084cdb4bef1d672008d1a85b15734a4a0d GIT binary patch literal 1783 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 literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-4.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-4.png new file mode 100644 index 0000000000000000000000000000000000000000..72a344e9886b2a5f9815ae470d60322e78aac82c GIT binary patch literal 1818 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 literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-7.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-7.png new file mode 100644 index 0000000000000000000000000000000000000000..6e522fc65b8c8e83215b936436541feb0aa4987c GIT binary patch literal 1792 zcmchY`9GBV0>{74^UPwO(GkY6Jl#|2C5MSh_Q%k{;iz=774y_2ZDVQd+dP&VLa9q~ zLZWi+E8!xvF^(*uM#s5PmO%<*9m`N+uJcdaA3mS=Z=WANpC3MHhus{N6|@up0Lsoz z4(^*I{+1kN)0=Hhc5VXVxjV8z`5Wy?04PtL9qfLM^qa{)l&XDDt@Xlq(XR8)NkL7w zn_Tb^UYY`A$D|x8c5)T;i@m#x68YUHtj}J(aay${onC_eVPGJqx-HlLMJh#YyGCzn z@n}ZuzD0}2IUAkFe+z@UQtFnugf^XFe34jRN>2pk&q!}+Y z%S^MZe1YO-^7EVYA&=PUAHbjFB067vMx_8Z7fWABZ6be=eY zzS0#Sl@?3x_K~917mxSEF%GC@D_zoX+5)D&N_x%s)k}bq0M1V3J!@RAd40!N@z@&_ zJkN5r#GbEySM0sJffpDYJzSPCyk{yJs{&pOrYc8rD3E)#(>^o@w@#AD#N9~(gLrin z{EvRI9_eaJ+XbPlHsQal#;6Hx7+-Pu>KZ`j1GNuP2Nso6551Fx-4+@>qwyQWHnLAC zFy-_6J2go1Uw!^})3~x`*Oc$`%@=-;8T)p7wjhZX4GMkyLiCMdG4A@!l6x^kG0p4y zr$>buy@+eD)#Y}&Oj3F+ke9bIWMd3=GG4(%6+Qep?`3AM9vTFDvUM~=7 zyxA{RhtZKR!X#{_5bQ?6j8I7%qpKAv)2nQy36IG3bYOJAfN}b*`8L~Vkzf=4U=x^3U&ZO}S~8hGTN4sRUUo5y+7+bJ!c;)s2P@1Rj@w*4x;> zM~E!4-Dhj807>2ftsw2>+GcD7oNRCQWYbA@tSTT-CxW+j?R>i+`nd@HAiecY6r3qR0Ab}ZJlJN3ivQg!XCIZ_3TZc z5GWc-d|I9xtYa4}W)=ZD=tuEJt)hCR3>`ESg1T!W3)^K=9xxev`59+`3HggmzJseL z?7EseYdf*b|B@b5<)g~I(B}=&jaPh3hJhwsluUc60l5G6emV0NaYeAm*;;Gf4^HF2 zUy%jls->ZwJQHf=;KkRXY0=M^5;15~*rQ*S_6L#9tbuLj1z;MHQ*3Q?eFgVLji*Z*k!x^)7RM zt0ZU5ZMAKJ*0mwg-hlzb&trw+GBIFowjO0r9Rd_-(x7UQUy`C6;R*?+8@VFnVCZq% zxM&?eB_Rt&-Ih8`A0kB;OAmkR-rydub!ob%Q`EI#PfdkVTQoo#-}HAH z=-bxb0g2DZ^!UCZbpthZHQCIS%@w`mPfsH^$VHj!9BDu8V5=v|0Fn>iIN%R;Uki4& z5M+$5?JF{&;^7d)%yTNs#4iC{dfY6icwd+-T*R*r%1baYlGj%zyd&5kxlK{4E&j?( zqVA3;AYRZ)?;8V>|7fC43Pd>^KFGJz4=L>_h6P4?4?ReqK!MkXF9mD2nz&c*ZmC@S z&23$UK099+7Z^8HB`Q6q?wMxxBTyQRam@Eg@ExERb2kn&JmD-0u2{xR7WebVA6rJV zG|_yvgrU5f(=0K}uZp`Z6}9}jwDIm0M7IZb?d|&Gdu<0avY@iswh7-Hb6uu0P=d3Q z%1^b-CURCn2F%a*O+LB-1WzM&BXI~Z1S9wF3po+)XWT6H5rLZ>-2%JCThe+L93GZu ze$Kq7e>)jtkRl(s43@)a*O}ap!h0Rs5nuJL=lHzn;&t|HUK(&d=;lz)!V~`o1L+UC literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-8.png b/tutorial/bug_anim/assets/sprites/Fighter/__animation_walk_walk-8.png new file mode 100644 index 0000000000000000000000000000000000000000..0383c427dad935d4caca7a77a3b52c8efd98c27c GIT binary patch literal 1773 zcmchY=~Gh&8^xb{6G$K|5m`cIiBJ?PMr5(F=7J(<5vVP;R+d{u5bCh#pkd8T5P`B7 zt4J(jqeW|hp{W$Y5+H~Oma@H05d>d$5s)RQ5P^`=f1)4GIp5BQGxM9172xNst@)8A z0B9fbIdF6%iGM{^-|%MlZ`(HlIe*mK6UsYHrU2A`Ids6|OHRmak$h==XvTOV8OL1IcHJkm4|_5`_|$@?K}Q(6I*!>7)K(k(q%?TMST zt$kSKns-NYk{#bVS62T0@|pb}`@o^E3SRc#zB#+x5SlU{7~d7$6&VmA@;0sKUqlHL z6k$S}J!aNmf`K4{a7}h1fY}8JigSQqw~@t#2|x)~()dU_LWTtOw&ns76&AGw8M`TT z7&m6>hU)x>1=vmF*Y8)FM`8mIGd9b9dhT&s_f&h7jj0L{>= zuR0}3n#+oxTyoO&SnCr}P45O}6dgLsV6yZejMFfyb%#fVN2r7=;*%BX zm{1f&1TovqWF)cO!qNSlAw_+SdxCMF(RHnJMs0d9vm*cdQ|_~Opw5HW(>LF8*NZ!T z+D(h^WP((1+y#?<*nGF&y5W2|w`9I7XE>=>Nt{K*cDTipQS+feMt;VbeB3RK-C(!C z6n`Iji6mU8TBYz#$>kN3+~C&eJKV(ACMdpcl~Q7#xf{|im~|$TMw=_SgHI|xn_Kg5 ztn*J@Z{YJ1mLg_ht7Dao!|$_j_NpPaoj#kOI6T=Vv7~b_dDyz17N(1xKHW5d zSIa_;y8c))M44kL#P!+>{zN`+n~^~AvzFl)^y+>+meKk^#n?e7V?1Dxx2^RocYUz# za!usWsCud&xrP(42Moit_&10N)HYe!+2bdwA$Cz(x42(ej*T0ZT#!2YTYs`?B=-&h zq*CN~s+(C0fP8g#!}Pja+@LpYyUdo}CrO^6Tk8PLfsD|pgahgYcm>@Pn^>qmP6V4?C)rfDNQ!Rf6Sb2qtMGzWedE`Y zhr#o3$D%WZ8lf_+GdtH9{6V-F-g6QNg>b5QMB(3>7p*UUAn9*}GjIFU*wI$Q|C{{f z<&b&VN=1t~|B=kQxxjp1)h^Tt;~l}Nghw|Serz0w?w?w5S$;saQG6WZS}#|T%fcJo zj9CJdc}s~hBPLoWLnyK%S4`q0Lx}~eV_l_BOL>ZFMqWE&mjNKUIb6vl78B!a5i0jGwzj1j3sK6*mX$;F;J zf?wYcL|%*oL>&C4%v9vJR;$+?rYg(DuY&IvDmCo#z2U?cjnJk=uto>mvFf$#Ef^92 z5Z}w*0Xg)re$wNL#zUMj=SoyS3tQ>ONVwj}0N7F&LUNvyAD)Ly^XH3I(}AC^jy=~P zs(e{8xoR`a7zo{WTrVPF#pQJ0X+Uu#oHMWkTgx?1jjNkC3w~8pY(gbg%EBi>ok$O3 z7USY1z^AU&s)zin*S%MJlH;n5pYD2iVn90Tm96?I)~49hzvdvd-K4p0q|y013bkea zhZ=^y^hRWFM$Mm^MC_9P&IZS;uPq+y^_$vd!!&; zSeoyfxRyG-Xr+qpUA|Sww_hK%L9j`7_UYE#;)!l1KCST(mAy$i#+wG}_Ge{+j(vM# c`r1{bvZr?SBk#QQH~tF_dHEeE_r&@C0DkQc*Z=?k literal 0 HcmV?d00001 diff --git a/tutorial/bug_anim/assets/sprites/Fighter/default.png b/tutorial/bug_anim/assets/sprites/Fighter/default.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5f68a457a3ce835632d9f54337a4f0f4e60205 GIT binary patch literal 2077 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 { + say "clicked", 0.5 + nextCostume +} \ No newline at end of file diff --git a/tutorial/center-pivot/assets/backdrop.png b/tutorial/center-pivot/assets/backdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..b395ac94c246fd4de8368a156f92010baa2abe21 GIT binary patch literal 1264 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|?860dtk$!Ux1qKF|I!_nJkcwMxuUaxPFmN0( zX#1Q$^EgYe(n9acs~H-?Co(YbNPv(*0tg*wU<4utW;PIlNQ`7TNT6U3mysa{Nf791 z0^;|PBB#oLk|B^i50!vtmJuk2uar2)@R^NsZt;VgUBCiKx5PD~Bsf2^a0 B;rIXm literal 0 HcmV?d00001 diff --git a/tutorial/center-pivot/assets/index.json b/tutorial/center-pivot/assets/index.json new file mode 100644 index 00000000..b23ba20e --- /dev/null +++ b/tutorial/center-pivot/assets/index.json @@ -0,0 +1 @@ +{"backdrops":[{"x":0,"y":0,"faceRight":0,"bitmapResolution":2,"name":"backdrop","path":"backdrop.png"}],"backdropIndex":0,"map":{"width":480,"height":360,"mode":"fillRatio"},"run":{"width":480,"height":360},"zorder":["Body"]} \ No newline at end of file diff --git a/tutorial/center-pivot/assets/sprites/Body/body.jpeg b/tutorial/center-pivot/assets/sprites/Body/body.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..415f1e96d1e851fac73b4fa2c1090d01243bb879 GIT binary patch literal 12072 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 B)K~xj literal 0 HcmV?d00001 diff --git a/tutorial/center-pivot/assets/sprites/Body/index.json b/tutorial/center-pivot/assets/sprites/Body/index.json new file mode 100644 index 00000000..643ae4b2 --- /dev/null +++ b/tutorial/center-pivot/assets/sprites/Body/index.json @@ -0,0 +1 @@ +{"heading":90,"x":0,"y":0,"size":1,"rotationStyle":"normal","costumeIndex":0,"visible":true,"isDraggable":false,"pivot":{"x":45,"y":-70},"costumes":[{"x":0,"y":0,"faceRight":0,"bitmapResolution":2,"name":"body","path":"body.jpeg"},{"x":0,"y":0,"faceRight":0,"bitmapResolution":2,"name":"cat","path":"cat.jpeg"}],"fAnimations":{},"animBindings":{}} \ No newline at end of file diff --git a/tutorial/center-pivot/main.spx b/tutorial/center-pivot/main.spx new file mode 100644 index 00000000..e69de29b diff --git a/tutorial/index.json b/tutorial/index.json new file mode 100644 index 00000000..17ece6f5 --- /dev/null +++ b/tutorial/index.json @@ -0,0 +1,219 @@ +{ + "heading": 90, + "x": -200, + "y": 0, + "size": 1.93, + "rotationStyle": "normal", + "costumeIndex": 0, + "visible": true, + "isDraggable": false, + "costumes": [ + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "default", + "path": "default.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_fight_attack_1-1", + "path": "__animation_fight_attack_1-1.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_fight_attack_1-2", + "path": "__animation_fight_attack_1-2.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_fight_attack_1-3", + "path": "__animation_fight_attack_1-3.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_fight_attack_1-4", + "path": "__animation_fight_attack_1-4.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_dying_dead-1", + "path": "__animation_dying_dead-1.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_dying_dead-2", + "path": "__animation_dying_dead-2.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_dying_dead-3", + "path": "__animation_dying_dead-3.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-1", + "path": "__animation_walk_walk-1.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-2", + "path": "__animation_walk_walk-2.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-3", + "path": "__animation_walk_walk-3.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-4", + "path": "__animation_walk_walk-4.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-5", + "path": "__animation_walk_walk-5.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-6", + "path": "__animation_walk_walk-6.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-7", + "path": "__animation_walk_walk-7.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_walk_walk-8", + "path": "__animation_walk_walk-8.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-1", + "path": "__animation_default_idle-1.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-2", + "path": "__animation_default_idle-2.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-3", + "path": "__animation_default_idle-3.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-4", + "path": "__animation_default_idle-4.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-5", + "path": "__animation_default_idle-5.png" + }, + { + "x": 0, + "y": 0, + "faceRight": 0, + "bitmapResolution": 2, + "name": "__animation_default_idle-6", + "path": "__animation_default_idle-6.png" + } + ], + "fAnimations": { + "fight": { + "from": "__animation_fight_attack_1-1", + "to": "__animation_fight_attack_1-4", + "duration": 0.4, + "anitype": 0 + }, + "dying": { + "from": "__animation_dying_dead-1", + "to": "__animation_dying_dead-3", + "duration": 0.6, + "anitype": 0 + }, + "walk": { + "from": "__animation_walk_walk-1", + "to": "__animation_walk_walk-8", + "duration": 0.8, + "anitype": 0 + }, + "default": { + "from": "__animation_default_idle-1", + "to": "__animation_default_idle-6", + "duration": 0.6, + "anitype": 0 + } + }, + "defaultAnimation": "default", + "animBindings": { + "die": "dying", + "step": "walk" + } +} \ No newline at end of file