You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
837 B
33 lines
837 B
package gohan |
|
|
|
import "log" |
|
|
|
type Context struct { |
|
Entity Entity |
|
|
|
s int // System index. |
|
c []ComponentID |
|
w *World |
|
} |
|
|
|
// Component gets a Component of the currently handled Entity. |
|
func (ctx *Context) Component(componentID ComponentID) interface{} { |
|
var found bool |
|
for _, id := range ctx.c { |
|
if id == componentID { |
|
found = true |
|
break |
|
} |
|
} |
|
if !found { |
|
log.Panicf("illegal component access: component %d is not queried by system %d", componentID, ctx.s) |
|
} |
|
return ctx.w.Component(ctx.Entity, componentID) |
|
} |
|
|
|
// RemoveEntity removes the currently handled Entity's components, causing it |
|
// to no longer be handled by any system. Because Gohan reuses removed EntityIDs, |
|
// applications must also remove any internal references to the removed Entity. |
|
func (ctx *Context) RemoveEntity() { |
|
ctx.w.RemoveEntity(ctx.Entity) |
|
}
|
|
|