SHADE_Y3/Assets/Scripts/Gameplay/Item/SC_Item.cs

172 lines
4.2 KiB
C#
Raw Normal View History

using SHADE;
2023-02-03 19:37:18 +08:00
using SHADE_Scripting.Audio;
using System;
public class Item : Script
{
public enum ItemCategory
{
LIGHT,
MEDIUM,
HEAVY
}
2023-03-25 02:38:56 +08:00
public enum Food
{
EGG,
APPLE,
MEAT,
WATERMELON,
CHEESE
}
public int Score = 10;
public ItemCategory currCategory;
2023-03-25 02:38:56 +08:00
public Food currFood;
public bool returnBack { get; set; }
private Transform transform;
private RigidBody rb;
private bool playSound = false;
private bool caputurePos = false;
private Vector3 firstPostion;
2023-03-24 20:30:01 +08:00
private Vector3 firstRotation;
public bool dontReturn = false;
2023-02-21 19:31:50 +08:00
private bool checkSound = false;
private bool homeownerOnce = true;
2023-02-21 19:31:50 +08:00
public float soundDistance = 10;
private float highlightPos = 0.0f;
private Renderable rend;
public float highlightSpeed = 200.0f;
public float highlightThickness = 600.0f;
public float highlightLowerClamp = 0.25f;
2023-03-21 15:27:42 +08:00
private ParticleEmitter emitter;
protected override void awake()
{
transform = GetComponent<Transform>();
rb = GetComponent<RigidBody>();
rend = GetComponent<Renderable>();
if (!rend)
Debug.Log("NO RENDERABLE");
returnBack = false;
2023-02-03 19:37:18 +08:00
AudioHandler.audioClipHandlers["SFXImpactElastic"] = Audio.CreateAudioClip("event:/Props/impact_elastic");
AudioHandler.audioClipHandlers["SFXImpactHard"] = Audio.CreateAudioClip("event:/Props/impact_hard");
2023-03-21 15:27:42 +08:00
emitter = GetComponent<ParticleEmitter>();
}
protected override void start()
{
GameManager.Instance.totalItemCount += 1;
2023-02-28 18:35:43 +08:00
if (rend)
{
if (currCategory == ItemCategory.LIGHT)
{
highlightThickness /= 10;
}
if (currCategory == ItemCategory.MEDIUM)
{
highlightThickness /= 5;
}
rend.Material.SetProperty<float>("data.thickness", highlightThickness);
}
}
protected override void update()
{
if (rend)
{
Vector3 dis = Camera.GetMainCamera().Position - transform.LocalPosition;
float disSqr = dis.GetSqrMagnitude();
float ratio = System.Math.Clamp(1 - (disSqr / (1 + disSqr)), highlightLowerClamp, 1.0f);
highlightPos += highlightSpeed * Time.DeltaTimeF * ratio;
rend.Material.SetProperty<float>("data.highlightPosition", highlightPos);
}
if (returnBack && !dontReturn)
{
if (rb)
{
rb.LinearVelocity = Vector3.Zero;
rb.AngularVelocity = Vector3.Zero;
rb.ClearForces();
rb.ClearTorque();
}
if (transform)
{
2023-03-24 20:30:01 +08:00
transform.LocalEulerAngles = firstRotation;
transform.LocalPosition = firstPostion;
}
returnBack = false;
}
2023-02-21 19:31:50 +08:00
if (checkSound)
{
/* //need to wait for collisionEnter Fix
Vector3 itemPos = transform.LocalPosition;
Vector3 len = Homeowner1.aiInstance.GetComponent<Transform>().LocalPosition - itemPos;
Debug.Log($"distance: {len.GetSqrMagnitude()}");
if (len.GetSqrMagnitude() <= soundDistance)
{
//set ai to alert
}
checkSound = false;*/
}
}
2022-11-21 21:01:44 +08:00
protected override void onCollisionEnter(CollisionInfo info)
{
2023-02-21 19:31:50 +08:00
if (!caputurePos)
{
firstPostion = transform.LocalPosition;
2023-03-24 20:30:01 +08:00
firstRotation = transform.LocalEulerAngles;
caputurePos = true;
}
if (playSound)
2023-02-03 19:37:18 +08:00
{
2023-03-04 00:19:35 +08:00
Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXImpactElastic"], GameObject.EntityId);
Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXImpactHard"], GameObject.EntityId);
2023-02-03 19:37:18 +08:00
if (currCategory == ItemCategory.LIGHT)
AudioHandler.audioClipHandlers["SFXImpactElastic"].Play();
2022-11-21 21:01:44 +08:00
else if (currCategory == ItemCategory.MEDIUM || currCategory == ItemCategory.HEAVY)
2023-02-03 19:37:18 +08:00
AudioHandler.audioClipHandlers["SFXImpactHard"].Play();
playSound = false;
2023-03-04 00:19:35 +08:00
Audio.DetachAudioClipFromObject(AudioHandler.audioClipHandlers["SFXImpactElastic"]);
Audio.DetachAudioClipFromObject(AudioHandler.audioClipHandlers["SFXImpactHard"]);
2023-03-21 15:27:42 +08:00
if(emitter)
emitter.Emit();
2022-11-21 21:01:44 +08:00
}
if (info.GameObject.GetScript<Homeowner1>() && homeownerOnce)
{
homeownerOnce = false;
returnBack = true;
}
2022-11-21 21:01:44 +08:00
}
protected override void onCollisionExit(CollisionInfo info)
{
playSound = true;
2023-02-21 19:31:50 +08:00
checkSound = true;
homeownerOnce = true;
}
}