Skip to content

Commit

Permalink
animation/animation.go: Move to world package & rename to EntityAnima…
Browse files Browse the repository at this point in the history
…tion
  • Loading branch information
TwistedAsylumMC authored and DaPigGuy committed Nov 18, 2024
1 parent 6fbdf9c commit e1a462b
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 68 deletions.
63 changes: 0 additions & 63 deletions server/entity/animation/animation.go

This file was deleted.

3 changes: 1 addition & 2 deletions server/session/world.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package session

import (
"github.com/df-mc/dragonfly/server/entity/animation"
"github.com/df-mc/dragonfly/server/entity/effect"
"image/color"
"math/rand"
Expand Down Expand Up @@ -977,7 +976,7 @@ func (s *Session) ViewEntityState(e world.Entity) {
}

// ViewEntityAnimation ...
func (s *Session) ViewEntityAnimation(e world.Entity, a animation.Animation) {
func (s *Session) ViewEntityAnimation(e world.Entity, a world.EntityAnimation) {
s.writePacket(&packet.AnimateEntity{
Animation: a.Name(),
NextState: a.NextState(),
Expand Down
63 changes: 63 additions & 0 deletions server/world/entity_animation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package world

// EntityAnimation represents an animation that may be played on an entity from an active resource pack on
// the client.
type EntityAnimation struct {
name string
nextState string
controller string
stopCondition string
}

// NewEntityAnimation returns a new animation that can be played on an entity. If no controller or stop
// condition is set, the animation will play for its full duration, including looping. Controllers can be set
// to manage multiple states of animations. It is also possible to use vanilla animations/controllers if they
// work for your entity, i.e. "animation.pig.baby_transform".
func NewEntityAnimation(name string) EntityAnimation {
return EntityAnimation{name: name}
}

// Name returns the name of the animation to be played.
func (a EntityAnimation) Name() string {
return a.name
}

// Controller returns the name of the controller to be used for the animation.
func (a EntityAnimation) Controller() string {
return a.controller
}

// WithController returns a copy of the EntityAnimation with the provided animation controller. An animation
// controller with the same name must be defined in a resource pack for it to work.
func (a EntityAnimation) WithController(controller string) EntityAnimation {
a.controller = controller
return a
}

// NextState returns the state to transition to after the animation has finished playing within the
// animation controller.
func (a EntityAnimation) NextState() string {
return a.nextState
}

// WithNextState returns a copy of the EntityAnimation with the provided state to transition to after the
// animation has finished playing within the animation controller.
func (a EntityAnimation) WithNextState(state string) EntityAnimation {
a.nextState = state
return a
}

// StopCondition returns the condition that must be met for the animation to stop playing. This is often
// a Molang expression that can be used to query various entity properties to determine when the animation
// should stop playing.
func (a EntityAnimation) StopCondition() string {
return a.stopCondition
}

// WithStopCondition returns a copy of the EntityAnimation with the provided stop condition. The stop condition
// is a Molang expression that can be used to query various entity properties to determine when the animation
// should stop playing.
func (a EntityAnimation) WithStopCondition(condition string) EntityAnimation {
a.stopCondition = condition
return a
}
5 changes: 2 additions & 3 deletions server/world/viewer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package world

import (
"github.com/df-mc/dragonfly/server/block/cube"
"github.com/df-mc/dragonfly/server/entity/animation"
"github.com/df-mc/dragonfly/server/world/chunk"
"github.com/go-gl/mathgl/mgl64"
"github.com/google/uuid"
Expand Down Expand Up @@ -51,7 +50,7 @@ type Viewer interface {
// physical appearance, for example when sprinting.
ViewEntityState(e Entity)
// ViewEntityAnimation starts viewing an animation performed by an Entity.
ViewEntityAnimation(e Entity, a animation.Animation)
ViewEntityAnimation(e Entity, a EntityAnimation)
// ViewParticle views a particle spawned at a given position in the world. It is called when a particle,
// for example a block breaking particle, is spawned near the player.
ViewParticle(pos mgl64.Vec3, p Particle)
Expand Down Expand Up @@ -92,7 +91,7 @@ func (NopViewer) ViewEntityItems(Entity)
func (NopViewer) ViewEntityArmour(Entity) {}
func (NopViewer) ViewEntityAction(Entity, EntityAction) {}
func (NopViewer) ViewEntityState(Entity) {}
func (NopViewer) ViewEntityAnimation(Entity, animation.Animation) {}
func (NopViewer) ViewEntityAnimation(Entity, EntityAnimation) {}
func (NopViewer) ViewParticle(mgl64.Vec3, Particle) {}
func (NopViewer) ViewSound(mgl64.Vec3, Sound) {}
func (NopViewer) ViewBlockUpdate(cube.Pos, Block, int) {}
Expand Down

0 comments on commit e1a462b

Please sign in to comment.