package main

import (
	"math"
	"time"

	"github.com/faiface/pixel"
	"github.com/faiface/pixel/imdraw"
	"github.com/faiface/pixel/pixelgl"
	"golang.org/x/image/colornames"
)

func run() {
	cfg := pixelgl.WindowConfig{
		Title:     "Xor",
		Bounds:    pixel.R(0, 0, 1024, 768),
		Resizable: true,
		VSync:     true,
	}
	win, err := pixelgl.NewWindow(cfg)
	if err != nil {
		panic(err)
	}

	imd := imdraw.New(nil)

	canvas := pixelgl.NewCanvas(win.Bounds())

	start := time.Now()
	for !win.Closed() {
		// in case window got resized, we also need to resize our canvas
		canvas.SetBounds(win.Bounds())

		offset := math.Sin(time.Since(start).Seconds()) * 300

		// clear the canvas to be totally transparent and set the xor compose method
		canvas.Clear(pixel.Alpha(0))
		canvas.SetComposeMethod(pixel.ComposeXor)

		// red circle
		imd.Clear()
		imd.Color(pixel.RGB(1, 0, 0))
		imd.Push(win.Bounds().Center() - pixel.X(offset))
		imd.Circle(200, 0)
		imd.Draw(canvas)

		// blue circle
		imd.Clear()
		imd.Color(pixel.RGB(0, 0, 1))
		imd.Push(win.Bounds().Center() + pixel.X(offset))
		imd.Circle(150, 0)
		imd.Draw(canvas)

		// yellow circle
		imd.Clear()
		imd.Color(pixel.RGB(1, 1, 0))
		imd.Push(win.Bounds().Center() - pixel.Y(offset))
		imd.Circle(100, 0)
		imd.Draw(canvas)

		// magenta circle
		imd.Clear()
		imd.Color(pixel.RGB(1, 0, 1))
		imd.Push(win.Bounds().Center() + pixel.Y(offset))
		imd.Circle(50, 0)
		imd.Draw(canvas)

		win.Clear(colornames.Green)
		canvas.Draw(win)
		win.Update()
	}
}

func main() {
	pixelgl.Run(run)
}
