1
Fork 0
mirror of https://github.com/Steffo99/better-tee.git synced 2024-11-21 14:54:18 +00:00

Add multitouch

This commit is contained in:
Steffo 2019-09-11 15:51:05 +02:00
parent 815ea194c0
commit 4a3b3fb339
9 changed files with 93 additions and 63 deletions

View file

@ -11,7 +11,6 @@ GameObject:
- component: {fileID: 6807415978649219551}
- component: {fileID: 6807415978649219550}
- component: {fileID: 6807415978649219545}
- component: {fileID: 6807415978649219544}
- component: {fileID: 6807415977000239074}
m_Layer: 0
m_Name: Drawable Frame
@ -98,20 +97,8 @@ MonoBehaviour:
m_EditorClassIdentifier:
resolution: {x: 500, y: 500}
startingColor: {r: 0, g: 0, b: 0, a: 0}
texture: {fileID: 0}
sprite: {fileID: 0}
--- !u!114 &6807415978649219544
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6807415978649219547}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 21d58fc36c2296c4787f0492c99a5d2c, type: 3}
m_Name:
m_EditorClassIdentifier:
locked: 0
hasChanged: 0
--- !u!114 &6807415977000239074
MonoBehaviour:
m_ObjectHideFlags: 0

View file

@ -8,9 +8,13 @@ public class DrawableFrame : MonoBehaviour
public Vector2Int resolution;
public Color startingColor = Color.white;
[Header("State")]
public bool locked = false;
public bool hasChanged = false;
[Header("References")]
public Texture2D texture = null;
public Sprite sprite = null;
protected Texture2D texture = null;
protected Sprite sprite = null;
private SpriteRenderer spriteRenderer;
@ -45,6 +49,23 @@ public class DrawableFrame : MonoBehaviour
spriteRenderer.sprite = sprite;
}
public Color[] GetPixels() {
return texture.GetPixels();
}
public void SetPixels(Color[] colors) {
if(!locked) {
texture.SetPixels(colors);
hasChanged = true;
}
}
protected void Update() {
if(hasChanged) {
texture.Apply();
}
}
protected void OnDrawGizmos()
{
Gizmos.DrawWireCube(transform.position, transform.localScale);

View file

@ -43,6 +43,9 @@ public class DrawingManager : MonoBehaviour
Debug.LogWarning("Invalid settings json string, using defaults.");
}
}
else {
Debug.Log(JsonUtility.ToJson(settings));
}
canvas = GameObject.FindGameObjectWithTag("Canvas").GetComponent<Canvas>();
@ -77,6 +80,9 @@ public class DrawingManager : MonoBehaviour
actDescription.text = settings.actDescription;
timer = Instantiate(timerPrefab, canvas.transform).GetComponent<Timer>();
timer.StartTimer(settings.timeLimit);
timer.TimerSet(settings.timeLimit);
//TODO: replace with a countdown or something
timer.TimerStart();
}
}

View file

@ -12,8 +12,8 @@ public class PencilTool : DrawTool
private Vector2Int? previousPixel;
private Vector2Int? pixel;
protected Vector2Int? HoveredPixel() {
Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
protected Vector2Int? GetPixelAtScreenPosition(Vector2 screenPosition) {
Vector2 worldPoint = Camera.main.ScreenToWorldPoint(screenPosition);
if(frame.Bounds.Contains(worldPoint)) {
Vector2 normalized = Rect.PointToNormalized(frame.Bounds, worldPoint);
Vector2Int result = new Vector2Int(Mathf.FloorToInt(normalized.x * frame.resolution.x), Mathf.FloorToInt(normalized.y * frame.resolution.y));
@ -24,13 +24,33 @@ public class PencilTool : DrawTool
protected override void Start() {
base.Start();
colors = frame.texture.GetPixels();
colors = frame.GetPixels();
Input.simulateMouseWithTouches = false;
}
protected void Update() {
bool hasChanged = false;
// Touch
foreach(Touch t in Input.touches) {
pixel = GetPixelAtScreenPosition(t.position);
previousPixel = GetPixelAtScreenPosition(t.position - t.deltaPosition);
if(pixel.HasValue) {
if(previousPixel.HasValue) {
DrawBresenhamsThickLine(pixel.Value, previousPixel.Value, size, selectedColor);
}
else {
DrawFilledCircle(pixel.Value, size, selectedColor);
}
}
hasChanged = true;
}
// Mouse
previousPixel = pixel;
if(Input.GetMouseButton(0)) {
pixel = HoveredPixel();
pixel = GetPixelAtScreenPosition(Input.mousePosition);
if(pixel.HasValue) {
if(previousPixel.HasValue) {
DrawBresenhamsThickLine(previousPixel.Value, pixel.Value, size, selectedColor);
@ -39,11 +59,15 @@ public class PencilTool : DrawTool
DrawFilledCircle(pixel.Value, size, selectedColor);
}
}
Apply();
hasChanged = true;
}
else {
pixel = null;
}
if(hasChanged) {
frame.SetPixels(colors);
}
}
protected void DrawPixel(int x, int y, Color color) {
@ -124,7 +148,5 @@ public class PencilTool : DrawTool
}
protected void Apply() {
frame.texture.SetPixels(colors);
frame.texture.Apply();
}
}

View file

@ -1,17 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SetSpriteFromDrawableFrame : MonoBehaviour
{
protected DrawableFrame frame;
protected SpriteRenderer spriteRenderer;
void Start()
{
frame = GetComponent<DrawableFrame>();
spriteRenderer = GetComponent<SpriteRenderer>();
Sprite sprite = Sprite.Create(frame.texture, new Rect(0, 0, frame.resolution.x, frame.resolution.y), new Vector2(0.5f, 0.5f), frame.resolution.x);
spriteRenderer.sprite = sprite;
}
}

View file

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 21d58fc36c2296c4787f0492c99a5d2c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -8,8 +8,9 @@ public class Timer : MonoBehaviour
{
public float startingTime = 0f;
public float time = 0f;
public bool isTriggered = false;
public bool isRunning = false;
private bool isTriggered = false;
private bool isRunning = false;
protected void Update() {
if(time >= 0f) {
@ -18,25 +19,40 @@ public class Timer : MonoBehaviour
}
}
else {
time = 0f;
if(isTriggered) {
OnTimeOut(EventArgs.Empty);
_OnTimeOut(EventArgs.Empty);
time = 0f;
isTriggered = false;
isRunning = false;
}
}
}
public void StartTimer(float startingTime) {
public void TimerSet(float startingTime) {
isTriggered = true;
isRunning = true;
isRunning = false;
this.startingTime = startingTime;
time = startingTime;
}
public event EventHandler TimeOut;
protected virtual void OnTimeOut(EventArgs e)
public void TimerStart() {
isRunning = true;
}
public void TimerPause() {
isRunning = false;
}
public void TimerCancel() {
time = 0f;
isTriggered = false;
isRunning = false;
}
public event EventHandler OnTimeOut;
protected virtual void _OnTimeOut(EventArgs e)
{
EventHandler handler = TimeOut;
EventHandler handler = OnTimeOut;
handler?.Invoke(this, e);
}
}

View file

@ -435,5 +435,11 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3241962964773812269, guid: 4fd713402edcc1c43b82d4d86a713998,
type: 3}
propertyPath: jsonString
value: '{"startingColor":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"palette":[{"r":1.0,"g":0.0,"b":0.0,"a":1.0},{"r":1.0,"g":1.0,"b":0.0,"a":1.0},{"r":0.0,"g":1.0,"b":0.0,"a":1.0},{"r":0.0,"g":1.0,"b":1.0,"a":1.0},{"r":0.0,"g":0.0,"b":1.0,"a":1.0},{"r":1.0,"g":0.0,"b":1.0,"a":1.0},{"r":1.0,"g":1.0,"b":1.0,"a":1.0}],"timeLimit":99.0,"actName":"RAINBOWS","actDescription":"Disegna
qualcosa con questi colori superluminosi!"}'
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4fd713402edcc1c43b82d4d86a713998, type: 3}

View file

@ -12,7 +12,7 @@ PlayerSettings:
targetDevice: 2
useOnDemandResources: 0
accelerometerFrequency: 60
companyName: DefaultCompany
companyName: Steffo
productName: better-tee
defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0}