func (camera *cameraInfo) doArchitectFocusRegion(g *Game, sys system.System) { if camera.limit.mid.X == 0 && camera.limit.mid.Y == 0 { // On the very first frame the limit midpoint will be (0,0), which should // never happen after the game begins. We use this as an opportunity to // init the data now that we know the region we're working with. rdx := float64(g.Levels[GidInvadersStart].Room.Dx) rdy := float64(g.Levels[GidInvadersStart].Room.Dy) if camera.regionDims.X/camera.regionDims.Y > rdx/rdy { camera.limit.dims.Y = rdy camera.limit.dims.X = rdy * camera.regionDims.X / camera.regionDims.Y } else { camera.limit.dims.X = rdx camera.limit.dims.Y = rdx * camera.regionDims.Y / camera.regionDims.X } camera.limit.mid.X = rdx / 2 camera.limit.mid.Y = rdy / 2 camera.current = camera.limit camera.zoom = 0 base.Log().Printf("Region Dims: %2.2v", camera.regionDims) base.Log().Printf("Room Dims: %2.2v %2.2v", rdx, rdy) base.Log().Printf("Limit Dims: %2.2v", camera.limit.dims) } wheel := gin.In().GetKeyFlat(gin.MouseWheelVertical, gin.DeviceTypeAny, gin.DeviceIndexAny) camera.zoom += wheel.FramePressAmt() / 500 if camera.zoom < 0 { camera.zoom = 0 } if camera.zoom > 2 { camera.zoom = 2 } zoom := 1 / math.Exp(camera.zoom) camera.current.dims = camera.limit.dims.Scale(zoom) if gin.In().GetKey(gin.AnySpace).CurPressAmt() > 0 { if !camera.cursorHidden { sys.HideCursor(true) camera.cursorHidden = true } x := gin.In().GetKey(gin.AnyMouseXAxis).FramePressAmt() y := gin.In().GetKey(gin.AnyMouseYAxis).FramePressAmt() camera.current.mid.X -= float64(x) * 2 camera.current.mid.Y -= float64(y) * 2 } else { if camera.cursorHidden { sys.HideCursor(false) camera.cursorHidden = false } } }