Drag
unknown
plain_text
8 months ago
4.0 kB
4
Indexable
using Unity.VisualScripting;
using UnityEngine;
public class DragAndDrop : MonoBehaviour
{
public GameObject targetPos;
private bool moving;
private GameObject objectToMove;
private float startPosX;
private float startPosY;
public SpawnComanda spawnComanda;
public SpriteRenderer ingredientSprite;
public PointHandler pointHandler;
void Update()
{
if (moving && objectToMove != null)
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
objectToMove.transform.position = new Vector3(
mousePos.x - startPosX,
mousePos.y - startPosY,
objectToMove.transform.position.z
);
}
}
private void OnMouseDown()
{
if (Input.GetMouseButtonDown(0))
{
// Create a clone at the original's position and rotation, preserving its parent
GameObject clone = Instantiate(this.gameObject, this.transform.position, this.transform.rotation, this.transform.parent);
// Remove the DragAndDrop script from the clone to avoid duplicate behavior
Destroy(clone.GetComponent<DragAndDrop>());
objectToMove = clone;
// Calculate the offset in world space
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
startPosX = mousePos.x - clone.transform.position.x;
startPosY = mousePos.y - clone.transform.position.y;
moving = true;
}
}
private void OnMouseUp()
{
moving = false;
if (objectToMove != null)
{
// Check if the clone is close to the caldero in world space
if (Mathf.Abs(objectToMove.transform.position.x - targetPos.transform.position.x) <= 2f &&
Mathf.Abs(objectToMove.transform.position.y - targetPos.transform.position.y) <= 1.5f)
{
// Snap the clone to the caldero's position and deactivate it
objectToMove.transform.position = targetPos.transform.position;
objectToMove.SetActive(false);
// Uncomment to add points if needed
// GameObject.Find("PointHandler").GetComponent<ganar>().AddPoints();
for (int i = 0; i < 4; i++){
if(spawnComanda.currentActiveComandaCorrectIngredients[spawnComanda.currentActiveComanda][i] == this.gameObject.tag) {
if (spawnComanda.ingredientIsCorrect[i] == false){
spawnComanda.ingredientIsCorrect[i] = true;
SetColor(Color.green); // Ingrediente correcto
i =4;
}
else{
DoubleIngredient();
i=4;
}
}
else if (i == 3){
IncorrectIngredient();
}
}
}
else
{
// Destroy the clone if not dropped correctly
Destroy(objectToMove);
}
// Clear the reference
objectToMove = null;
}
}
void IncorrectIngredient(){
pointHandler.score = pointHandler.score - 20;
Debug.Log("Ingrediente incorrecto");
SetColor(Color.red); // Color rojo para ingrediente incorrecto
}
void DoubleIngredient(){
pointHandler.score = pointHandler.score - 10;
Debug.Log("Ingrediente duplicado");
SetColor(Color.yellow); // Color amarillo para ingrediente duplicado
}
private void SetColor(Color newColor)
{
if (ingredientSprite != null)
{
ingredientSprite.color = newColor;
}
}
}Editor is loading...
Leave a Comment