package uix import ( "git.kirsle.net/apps/doodle/doodads" "git.kirsle.net/apps/doodle/level" "git.kirsle.net/apps/doodle/render" uuid "github.com/satori/go.uuid" ) // Actor is an object that marries together the three things that make a // Doodad instance "tick" while inside a Canvas: // // - uix.Actor is a doodads.Drawing so it fulfills doodads.Actor to be a // dynamic object during gameplay. // - It has a pointer to the level.Actor indicating its static level data // as defined in the map: its spawn coordinate and configuration. // - A uix.Canvas that can present the actor's graphics to the screen. type Actor struct { doodads.Drawing Actor *level.Actor Canvas *Canvas } // NewActor sets up a uix.Actor. // If the id is blank, a new UUIDv4 is generated. func NewActor(id string, levelActor *level.Actor, doodad *doodads.Doodad) *Actor { if id == "" { id = uuid.Must(uuid.NewV4()).String() } size := int32(doodad.Layers[0].Chunker.Size) can := NewCanvas(int(size), false) can.Name = id can.actor = levelActor // TODO: if the Background is render.Invisible it gets defaulted to // White somewhere and the Doodad masks the level drawing behind it. can.SetBackground(render.RGBA(0, 0, 1, 0)) can.LoadDoodad(doodad) can.Resize(render.NewRect(size, size)) return &Actor{ Drawing: doodads.NewDrawing(id, doodad), Actor: levelActor, Canvas: can, } }