func (a *SummonAction) HandleInput(group gui.EventGroup, g *game.Game) (bool, game.ActionExec) { cursor := group.Events[0].Key.Cursor() if cursor != nil { bx, by := g.GetViewer().WindowToBoard(cursor.Point()) bx += 0.5 by += 0.5 if bx < 0 { bx-- } if by < 0 { by-- } a.cx = int(bx) a.cy = int(by) } if found, event := group.FindEvent(gin.MouseLButton); found && event.Type == gin.Press { if g.IsCellOccupied(a.cx, a.cy) { return true, nil } if a.Personal_los && !a.ent.HasLos(a.cx, a.cy, 1, 1) { return true, nil } if a.ent.Stats.ApCur() >= a.Ap { var exec summonExec exec.SetBasicData(a.ent, a) exec.Pos = a.ent.Game().ToVertex(a.cx, a.cy) return true, &exec } return true, nil } return false, nil }
func (a *Move) Prep(ent *game.Entity, g *game.Game) bool { a.ent = ent fx, fy := g.GetViewer().WindowToBoard(gin.In().GetCursor("Mouse").Point()) a.findPath(ent, int(fx), int(fy)) a.threshold = a.ent.Stats.ApCur() return true }
func (a *Interact) HandleInput(group gui.EventGroup, g *game.Game) (bool, game.ActionExec) { if found, event := group.FindEvent(gin.MouseLButton); found && event.Type == gin.Press { bx, by := g.GetViewer().WindowToBoard(gin.In().GetCursor("Mouse").Point()) room_num := a.ent.CurrentRoom() room := g.House.Floors[0].Rooms[room_num] for door_num, door := range room.Doors { rect := makeRectForDoor(room, door) if rect.Contains(float64(bx), float64(by)) { var exec interactExec exec.Toggle_door = true exec.SetBasicData(a.ent, a) exec.Room = room_num exec.Door = door_num return true, &exec } } } target := g.HoveredEnt() if target == nil { return false, nil } if found, event := group.FindEvent(gin.MouseLButton); found && event.Type == gin.Press { for i := range a.targets { if a.targets[i] == target && distBetweenEnts(a.ent, target) <= a.Range { var exec interactExec exec.SetBasicData(a.ent, a) exec.Target = target.Id return true, &exec } } return true, nil } return false, nil }
func (a *AoeAttack) Prep(ent *game.Entity, g *game.Game) bool { if !a.Preppable(ent, g) { return false } a.ent = ent bx, by := g.GetViewer().WindowToBoard(gin.In().GetCursor("Mouse").Point()) a.tx = int(bx) a.ty = int(by) return true }
func (a *AoeAttack) HandleInput(group gui.EventGroup, g *game.Game) (bool, game.ActionExec) { cursor := group.Events[0].Key.Cursor() if cursor != nil && cursor.Name() == "Mouse" { bx, by := g.GetViewer().WindowToBoard(cursor.Point()) a.tx = int(bx) a.ty = int(by) } if found, event := group.FindEvent(gin.MouseLButton); found && event.Type == gin.Press { ex, ey := a.ent.Pos() if dist(ex, ey, a.tx, a.ty) <= a.Range && a.ent.HasLos(a.tx, a.ty, 1, 1) { var exec aoeExec exec.SetBasicData(a.ent, a) exec.X, exec.Y = a.tx, a.ty return true, &exec } else { return true, nil } return true, nil } return false, nil }
func (a *Move) HandleInput(group gui.EventGroup, g *game.Game) (bool, game.ActionExec) { cursor := group.Events[0].Key.Cursor() if cursor != nil { fx, fy := g.GetViewer().WindowToBoard(cursor.Point()) a.findPath(a.ent, int(fx), int(fy)) } if found, _ := group.FindEvent(gin.MouseLButton); found { if len(a.path) > 0 { if a.cost <= a.ent.Stats.ApCur() { var exec moveExec exec.SetBasicData(a.ent, a) algorithm.Map2(a.path, &exec.Path, func(v [2]int) int { return g.ToVertex(v[0], v[1]) }) return true, &exec } return true, nil } else { return false, nil } } return false, nil }