Files
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

74 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class changeObjectsPositionPower : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool powerEnabled = true;
public LayerMask layer;
public LayerMask groundLayer;
[Space]
[Header ("Components")]
[Space]
public otherPowers powersManager;
public Transform mainCameraTransform;
public Transform playerTransform;
public Transform playerCameraTransform;
public gravitySystem gravityManager;
RaycastHit hit;
public void activatePower ()
{
if (!powerEnabled) {
return;
}
//this power changes the player's position with the object located with a ray when the player fires
if (Physics.Raycast (mainCameraTransform.position, mainCameraTransform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layer)) {
if (!hit.collider.isTrigger) {
powersManager.createShootParticles ();
GameObject objectToMove = hit.collider.gameObject;
GameObject characterDetected = applyDamage.getCharacterOrVehicle (objectToMove);
if (characterDetected != null) {
objectToMove = characterDetected;
} else if (objectToMove.GetComponent<Rigidbody> () == null) {
return;
}
Vector3 newPlayerPosition = objectToMove.transform.position;
Vector3 newObjectPosition = playerTransform.position;
objectToMove.transform.position = Vector3.one * 100;
playerTransform.position = Vector3.zero;
if (Physics.Raycast (newPlayerPosition, -gravityManager.getCurrentNormal (), out hit, Mathf.Infinity, groundLayer)) {
newPlayerPosition = hit.point;
}
if (Physics.Raycast (newObjectPosition + playerTransform.up, -gravityManager.getCurrentNormal (), out hit, Mathf.Infinity, groundLayer)) {
newObjectPosition = hit.point + playerTransform.up;
}
objectToMove.transform.position = newObjectPosition;
playerTransform.position = newPlayerPosition;
playerCameraTransform.position = newPlayerPosition;
}
}
}
}