1
Fork 0
mirror of https://github.com/Steffo99/better-tee.git synced 2024-11-22 23:34:18 +00:00
better-tee/Assets/Code/DrawingController.cs

135 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DrawingController : ActController
{
[Header("Prefabs")]
public GameObject drawableFramePrefab;
public GameObject paletteButtonPrefab;
public GameObject radiusSliderPrefab;
public GameObject actNamePrefab;
public GameObject actDescriptionPrefab;
public GameObject actTimerPrefab;
[Header("Objects")]
protected PencilTool pencil;
protected DrawableFrame drawableFrame;
protected List<PaletteButton> paletteButtons;
protected RadiusSlider radiusSlider;
protected Text actName;
protected Text actDescription;
protected Timer actTimer;
[Serializable]
public class DrawingSettings : ActSettings {
public Color startingColor = Color.white;
public List<Color> palette = new List<Color>();
public float timeLimit = 99f;
public string actName = "Untitled";
public string actDescription = "This Act is missing a description.";
public string destinationPool = "default";
public DrawingSettings(Color startingColor, List<Color> palette, float timeLimit, string actName, string actDescription, string destinationPool) {
this.type = "Drawing";
this.startingColor = startingColor;
this.palette = palette;
this.timeLimit = timeLimit;
this.actName = actName;
this.actDescription = actDescription;
this.destinationPool = destinationPool;
}
}
[Serializable]
public class DrawingResults : ActResults {
public readonly byte[] pngBytes;
public DrawingResults(byte[] pngBytes) {
this.pngBytes = pngBytes;
}
}
public override void ActInit() {
base.ActInit();
//Load settings
DrawingSettings drawingSettings = settings as DrawingSettings;
//Create drawable frame
drawableFrame = Instantiate(drawableFramePrefab, transform).GetComponent<DrawableFrame>();
drawableFrame.startingColor = drawingSettings.startingColor;
//Init PencilTool
pencil = drawableFrame.GetComponent<PencilTool>();
try {
pencil.selectedColor = drawingSettings.palette[0];
} catch(ArgumentOutOfRangeException) {
pencil.selectedColor = drawingSettings.startingColor;
}
//Init PaletteButtons
paletteButtons = new List<PaletteButton>();
for(int i = 0; i < drawingSettings.palette.Count; i++) {
PaletteButton button = Instantiate(paletteButtonPrefab, canvas.transform).GetComponent<PaletteButton>();
RectTransform btnTransform = button.GetComponent<RectTransform>();
Image btnImage = button.GetComponent<Image>();
button.pencil = pencil;
btnImage.color = drawingSettings.palette[i];
btnTransform.anchoredPosition = new Vector2(-420 + i * 110, 150);
paletteButtons.Add(button);
}
//Init RadiusSlider
radiusSlider = Instantiate(radiusSliderPrefab, canvas.transform).GetComponent<RadiusSlider>();
radiusSlider.pencil = pencil;
//Init actName Text
actName = Instantiate(actNamePrefab, canvas.transform).GetComponent<Text>();
actName.text = drawingSettings.actName;
//Init actDescription Text
actDescription = Instantiate(actDescriptionPrefab, canvas.transform).GetComponent<Text>();
actDescription.text = drawingSettings.actDescription;
//Init actTimer
actTimer = Instantiate(actTimerPrefab, canvas.transform).GetComponent<Timer>();
actTimer.TimerSet(drawingSettings.timeLimit);
}
public override void ActStart() {
base.ActStart();
//Unlock frame
drawableFrame.interactable = false;
//Start timer
actTimer.OnTimeOut += new Action(ActEnd);
actTimer.TimerStart();
}
public override void ActEnd() {
base.ActEnd();
//Lock frame
drawableFrame.interactable = true;
//Generate results
results = new DrawingResults(drawableFrame.ToPNG());
}
public override void ActCleanup() {
base.ActCleanup();
Destroy(drawableFrame.gameObject);
foreach(PaletteButton button in paletteButtons) {
Destroy(button.gameObject);
}
Destroy(radiusSlider.gameObject);
Destroy(actName.gameObject);
Destroy(actDescription.gameObject);
Destroy(actTimer.gameObject);
}
}