Steam lobby implemented
This commit is contained in:
@ -1,16 +1,13 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
[RequireComponent(typeof(Collider))]
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
public abstract class CarryableItem : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private string itemName;
|
||||
public string ItemName { get { return this.itemName; } }
|
||||
[SerializeField]
|
||||
private int itemSize = 1;
|
||||
public int ItemSize { get { return this.itemSize; } }
|
||||
[SerializeField] private string itemName;
|
||||
|
||||
}
|
||||
[SerializeField] private int itemSize = 1;
|
||||
|
||||
public string ItemName => itemName;
|
||||
public int ItemSize => itemSize;
|
||||
}
|
@ -1,77 +1,66 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DoorInteractable : HeavyItemReceiver
|
||||
{
|
||||
[SerializeField]
|
||||
private Transform powerCoreCenter;
|
||||
[SerializeField] private Transform powerCoreCenter;
|
||||
|
||||
[SerializeField] private float minAttractDist = 5;
|
||||
|
||||
[SerializeField] private string nameSearched = "Power Core";
|
||||
|
||||
[SerializeField] private Animator[] anims;
|
||||
|
||||
private HeavyInteractableItem insertedCore;
|
||||
private Vector3 priorLocalPos;
|
||||
private Vector3 priorLocalRot;
|
||||
private Vector3 priorScale;
|
||||
|
||||
[SerializeField]
|
||||
private float minAttractDist = 5;
|
||||
[SerializeField]
|
||||
private string nameSearched = "Power Core";
|
||||
public bool Powered => insertedCore != null;
|
||||
|
||||
public bool Powered { get { return this.insertedCore!= null; } }
|
||||
[SerializeField]
|
||||
private Animator[] anims;
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
foreach(Animator anim in anims)
|
||||
{
|
||||
anim.SetBool("IsPowered", Powered);
|
||||
}
|
||||
|
||||
foreach (var anim in anims) anim.SetBool("IsPowered", Powered);
|
||||
}
|
||||
|
||||
public override bool Interact()
|
||||
{
|
||||
//print("INTERACTED!");
|
||||
if(this.insertedCore== null)
|
||||
if (insertedCore == null)
|
||||
{
|
||||
HeavyInteractableItem[] worldHeavyItems = GameObject.FindObjectsOfType<HeavyInteractableItem>();
|
||||
var worldHeavyItems = FindObjectsOfType<HeavyInteractableItem>();
|
||||
//print("Found:" + worldHeavyItems.Length);
|
||||
for(int i = 0; i < worldHeavyItems.Length; i++)
|
||||
for (var i = 0; i < worldHeavyItems.Length; i++)
|
||||
{
|
||||
HeavyInteractableItem item = worldHeavyItems[i];
|
||||
|
||||
if (!item.ItemName.Contains(nameSearched))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
float dist = Vector3.Distance(item.transform.position, powerCoreCenter.transform.position);
|
||||
var item = worldHeavyItems[i];
|
||||
|
||||
if (!item.ItemName.Contains(nameSearched)) continue;
|
||||
var dist = Vector3.Distance(item.transform.position, powerCoreCenter.transform.position);
|
||||
//print("DIST:" + dist);
|
||||
if (dist <= minAttractDist)
|
||||
{
|
||||
Inventory _i = PlayerInteractionHandler.instance.Inventory;
|
||||
this.Interact(ref _i, ref item);
|
||||
var _i = PlayerInteractionHandler.instance.Inventory;
|
||||
Interact(ref _i, ref item);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
public override bool Interact(ref Inventory inventory,ref HeavyInteractableItem heavyInvent)
|
||||
|
||||
public override bool Interact(ref Inventory inventory, ref HeavyInteractableItem heavyInvent)
|
||||
{
|
||||
//print("INTERACTED 2");
|
||||
// print(heavyInvent);
|
||||
|
||||
if (heavyInvent!=null&&heavyInvent.ItemName.Contains(nameSearched))
|
||||
// print(heavyInvent);
|
||||
|
||||
if (heavyInvent != null && heavyInvent.ItemName.Contains(nameSearched))
|
||||
{
|
||||
//print("DOOR OPEN!");
|
||||
heavyInvent.GetComponent<Rigidbody>().isKinematic = true;
|
||||
@ -82,27 +71,26 @@ public class DoorInteractable : HeavyItemReceiver
|
||||
priorScale = heavyInvent.transform.localScale;
|
||||
|
||||
heavyInvent.transform.parent = powerCoreCenter;
|
||||
|
||||
|
||||
heavyInvent.gameObject.transform.localPosition = Vector3.zero;
|
||||
heavyInvent.gameObject.transform.localEulerAngles = Vector3.zero;
|
||||
heavyInvent.transform.parent = null;
|
||||
heavyInvent.gameObject.transform.localScale = priorScale;
|
||||
|
||||
|
||||
insertedCore = heavyInvent;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
else if(insertedCore!=null&&heavyInvent==null)
|
||||
|
||||
if (insertedCore != null && heavyInvent == null)
|
||||
{
|
||||
heavyInvent = insertedCore;
|
||||
|
||||
|
||||
insertedCore = null;
|
||||
//get ref of player perhaps
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,70 +1,69 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
public class FlareBeacon : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private float range = 1;
|
||||
public float Range { get { return range; }}
|
||||
[SerializeField]
|
||||
private float duration = 5f;
|
||||
[SerializeField] private float range = 1;
|
||||
|
||||
private List<GameObject> inRange= new List<GameObject>();
|
||||
[SerializeField]
|
||||
private NavMeshObstacle obstacle;
|
||||
[SerializeField] private float duration = 5f;
|
||||
|
||||
[SerializeField] private NavMeshObstacle obstacle;
|
||||
|
||||
private readonly List<GameObject> inRange = new();
|
||||
|
||||
private FlareRegister register;
|
||||
void OnDrawGizmosSelected()
|
||||
{
|
||||
// Draw a yellow sphere at the transform's position
|
||||
Gizmos.color = Color.yellow;
|
||||
|
||||
Gizmos.DrawWireSphere(transform.position, range);
|
||||
}
|
||||
|
||||
public float Range => range;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
register = FlareRegister.instance;
|
||||
register.beacons.Add(this);
|
||||
transform.localEulerAngles = new Vector3(-89.98f, 0, 0);
|
||||
Ray r = new Ray();
|
||||
var r = new Ray();
|
||||
r.direction = -transform.forward;
|
||||
r.origin = transform.position;
|
||||
RaycastHit hit;
|
||||
RaycastHit[] rays = Physics.RaycastAll(r);
|
||||
foreach(RaycastHit _hit in rays)
|
||||
var rays = Physics.RaycastAll(r);
|
||||
foreach (var _hit in rays)
|
||||
{
|
||||
if (_hit.transform.gameObject.GetComponent<FlareBeacon>() != null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (_hit.transform.gameObject.GetComponent<FlareBeacon>() != null) continue;
|
||||
transform.position = _hit.point;
|
||||
break;
|
||||
}
|
||||
if(Physics.Raycast(r,out hit)){
|
||||
// transform.position = hit.point;
|
||||
|
||||
if (Physics.Raycast(r, out hit))
|
||||
{
|
||||
// transform.position = hit.point;
|
||||
}
|
||||
|
||||
if(obstacle!=null)
|
||||
obstacle.radius = this.range / 10;
|
||||
if (obstacle != null)
|
||||
obstacle.radius = range / 10;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
// Draw a yellow sphere at the transform's position
|
||||
Gizmos.color = Color.yellow;
|
||||
|
||||
Gizmos.DrawWireSphere(transform.position, range);
|
||||
}
|
||||
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
inRange.Add(other.gameObject);
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
inRange.Remove(other.gameObject);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,27 +1,21 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class GenericInteractable : InteractableItem
|
||||
{
|
||||
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
BaseAwake();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override bool Interact()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool Interact(ref Inventory inventory, ref HeavyInteractableItem heavyInvent)
|
||||
{
|
||||
return this.Interact();
|
||||
return Interact();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,32 +1,38 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class HeavyInteractableItem : InteractableItem
|
||||
{
|
||||
private Vector3 init_rot;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
init_rot = transform.eulerAngles;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
BaseFixedUpdate();
|
||||
//print("Alpha Target:"+ base.target_alpha);
|
||||
}
|
||||
|
||||
public void DisableAll()
|
||||
{
|
||||
this.GetComponent<Collider>().enabled = false;
|
||||
|
||||
GetComponent<Collider>().enabled = false;
|
||||
}
|
||||
|
||||
public override bool Interact()
|
||||
{
|
||||
//Todo
|
||||
return false;
|
||||
}
|
||||
public override bool Interact(ref Inventory inventory,ref HeavyInteractableItem heavyInvent)
|
||||
|
||||
public override bool Interact(ref Inventory inventory, ref HeavyInteractableItem heavyInvent)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -34,14 +40,7 @@ public class HeavyInteractableItem : InteractableItem
|
||||
|
||||
public void EnableAll()
|
||||
{
|
||||
this.GetComponent<Collider>().enabled = true;
|
||||
this.transform.eulerAngles = new Vector3(init_rot.x,transform.eulerAngles.y,init_rot.z);
|
||||
|
||||
GetComponent<Collider>().enabled = true;
|
||||
transform.eulerAngles = new Vector3(init_rot.x, transform.eulerAngles.y, init_rot.z);
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
BaseFixedUpdate();
|
||||
//print("Alpha Target:"+ base.target_alpha);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,9 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public abstract class HeavyItemReceiver : InteractableItem
|
||||
{
|
||||
protected HeavyInteractableItem item;
|
||||
[SerializeField]
|
||||
[Tooltip("Specify the keyword search in the name of the item!")]
|
||||
[SerializeField] [Tooltip("Specify the keyword search in the name of the item!")]
|
||||
protected string searchString;
|
||||
|
||||
|
||||
}
|
||||
protected HeavyInteractableItem item;
|
||||
}
|
@ -1,77 +1,68 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
|
||||
[RequireComponent(typeof(Collider))]
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
public abstract class InteractableItem : CarryableItem
|
||||
{
|
||||
|
||||
[SerializeField] private Canvas interactionCanvas;
|
||||
|
||||
[SerializeField] protected bool canPickup;
|
||||
|
||||
[SerializeField]
|
||||
private Canvas interactionCanvas;
|
||||
private TMP_Text[] interaction_texts;
|
||||
private Image[] interaction_images;
|
||||
protected float target_alpha = 0;
|
||||
[SerializeField]
|
||||
protected bool canPickup = false;
|
||||
protected bool isEnabled = false;
|
||||
private TMP_Text[] interaction_texts;
|
||||
protected bool isEnabled;
|
||||
protected float target_alpha;
|
||||
|
||||
public bool CanPickup { get { return canPickup; } }
|
||||
public bool IsEnabled { get { return isEnabled; } }
|
||||
public bool CanPickup => canPickup;
|
||||
public bool IsEnabled => isEnabled;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
BaseAwake();
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
BaseFixedUpdate();
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
//print("Enabled!");
|
||||
interactionCanvas.transform.LookAt((GameObject.FindGameObjectWithTag("MainCamera").transform.position));
|
||||
interactionCanvas.transform.LookAt(GameObject.FindGameObjectWithTag("MainCamera").transform.position);
|
||||
interactionCanvas.transform.Rotate(0, 180, 0);
|
||||
target_alpha = 1;
|
||||
isEnabled = true;
|
||||
}
|
||||
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
//print("Disabled!");
|
||||
target_alpha = 0;
|
||||
isEnabled = true;
|
||||
}
|
||||
|
||||
public abstract bool Interact();
|
||||
public abstract bool Interact(ref Inventory inventory,ref HeavyInteractableItem heavyInvent);
|
||||
|
||||
public abstract bool Interact(ref Inventory inventory, ref HeavyInteractableItem heavyInvent);
|
||||
|
||||
protected void BaseAwake()
|
||||
{
|
||||
interaction_texts = interactionCanvas.GetComponentsInChildren<TMP_Text>();
|
||||
interaction_images = interactionCanvas.GetComponentsInChildren<Image>();
|
||||
foreach (TMP_Text text in interaction_texts)
|
||||
{
|
||||
text.color = new Color(text.color.r, text.color.g, text.color.b, 0);
|
||||
}
|
||||
foreach (Image image in interaction_images)
|
||||
{
|
||||
foreach (var text in interaction_texts) text.color = new Color(text.color.r, text.color.g, text.color.b, 0);
|
||||
foreach (var image in interaction_images)
|
||||
image.color = new Color(image.color.r, image.color.g, image.color.b, 0);
|
||||
}
|
||||
}
|
||||
protected void BaseFixedUpdate()
|
||||
{
|
||||
foreach (TMP_Text text in interaction_texts)
|
||||
{
|
||||
text.color = Color.Lerp(new Color(text.color.r, text.color.g, text.color.b, text.color.a), new Color(text.color.r, text.color.g, text.color.b, target_alpha), 10 * Time.deltaTime);
|
||||
}
|
||||
foreach (Image image in interaction_images)
|
||||
{
|
||||
image.color = Color.Lerp(new Color(image.color.r, image.color.g, image.color.b, image.color.a), new Color(image.color.r, image.color.g, image.color.b, target_alpha), 10 * Time.deltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
protected void BaseFixedUpdate()
|
||||
{
|
||||
BaseAwake();
|
||||
foreach (var text in interaction_texts)
|
||||
text.color = Color.Lerp(new Color(text.color.r, text.color.g, text.color.b, text.color.a),
|
||||
new Color(text.color.r, text.color.g, text.color.b, target_alpha), 10 * Time.deltaTime);
|
||||
foreach (var image in interaction_images)
|
||||
image.color = Color.Lerp(new Color(image.color.r, image.color.g, image.color.b, image.color.a),
|
||||
new Color(image.color.r, image.color.g, image.color.b, target_alpha), 10 * Time.deltaTime);
|
||||
}
|
||||
private void FixedUpdate()
|
||||
{
|
||||
BaseFixedUpdate();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +1,29 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class KeyItem : InteractableItem
|
||||
{
|
||||
[SerializeField]
|
||||
private string keyName;
|
||||
public string KeyName { get { return keyName; } }
|
||||
[SerializeField] private string keyName;
|
||||
|
||||
public string KeyName => keyName;
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
BaseAwake();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
|
||||
}
|
||||
public override bool Interact()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
public override bool Interact(ref Inventory inventory,ref HeavyInteractableItem heavyInvent)
|
||||
{
|
||||
return this.Interact();
|
||||
}
|
||||
|
||||
}
|
||||
public override bool Interact()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override bool Interact(ref Inventory inventory, ref HeavyInteractableItem heavyInvent)
|
||||
{
|
||||
return Interact();
|
||||
}
|
||||
}
|
@ -1,42 +1,40 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BulletComponent : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private float duration = 5f;
|
||||
private float existed = 0f;
|
||||
[SerializeField]
|
||||
private string type = "flare";
|
||||
[SerializeField] private float duration = 5f;
|
||||
|
||||
[SerializeField] private string type = "flare";
|
||||
|
||||
[SerializeField] private float damageRange = 20f;
|
||||
|
||||
[SerializeField] private float damageMagnitude = 1f;
|
||||
|
||||
private float existed;
|
||||
private FlareRegister register;
|
||||
[SerializeField]
|
||||
private float damageRange = 20f;
|
||||
[SerializeField]
|
||||
private float damageMagnitude = 1f;
|
||||
public float DamageMagnitude { get { return this.damageMagnitude; } }
|
||||
public float DamageRange { get { return damageRange; } }
|
||||
|
||||
public float DamageMagnitude => damageMagnitude;
|
||||
public float DamageRange => damageRange;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
register = FlareRegister.instance;
|
||||
register.bullets.Add(this);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if(existed >= duration)
|
||||
if (existed >= duration)
|
||||
{
|
||||
register.bullets.Remove(this);
|
||||
Destroy(this.gameObject);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
existed += Time.fixedDeltaTime;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,28 +1,27 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class PistolAnimationAimAssist : MonoBehaviour
|
||||
{
|
||||
public Transform leftShoulder;
|
||||
public Transform rightShoulder;
|
||||
[SerializeField]
|
||||
private bool isEnabled = false;
|
||||
|
||||
Vector3 lTarget;
|
||||
Vector3 rTarget;
|
||||
[SerializeField] private bool isEnabled;
|
||||
|
||||
private Animator anim;
|
||||
|
||||
private Vector3 lTarget;
|
||||
private Vector3 rTarget;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
lTarget = new Vector3(72.9f, 122.2f, -129.9f);
|
||||
rTarget = new Vector3(82f, 11f, -88f);
|
||||
anim =GetComponent<Animator>();
|
||||
anim = GetComponent<Animator>();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
if (isEnabled)
|
||||
{
|
||||
@ -33,12 +32,14 @@ public class PistolAnimationAimAssist : MonoBehaviour
|
||||
anim.StartPlayback();
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
isEnabled = true;
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
isEnabled = false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,127 +1,124 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Burst.CompilerServices;
|
||||
using UnityEngine;
|
||||
using UnityEngine.VFX;
|
||||
|
||||
public class PistolComponent : MonoBehaviour
|
||||
{
|
||||
public enum AimMode
|
||||
{
|
||||
GUN,
|
||||
MODIFIED,
|
||||
CAMERA
|
||||
}
|
||||
|
||||
public enum AimMode {GUN,MODIFIED,CAMERA};
|
||||
public AimMode aimMode = AimMode.CAMERA;
|
||||
[SerializeField]
|
||||
private Light targetingLight;
|
||||
|
||||
[SerializeField] private Light targetingLight;
|
||||
|
||||
[SerializeField] private GameObject targetObjectPrefab;
|
||||
|
||||
[SerializeField] public GameObject projectilePrefab;
|
||||
|
||||
[SerializeField] public string projectileName;
|
||||
|
||||
[SerializeField] private Transform bulletSpawnPoint;
|
||||
|
||||
[SerializeField] private float firePower = 20f;
|
||||
|
||||
[SerializeField] private float maxProjectileDuration = 5f;
|
||||
|
||||
[SerializeField] private float maxTargetObjDistance = 15f;
|
||||
|
||||
[SerializeField] private VisualEffect shootEffect;
|
||||
|
||||
[SerializeField] private Light shootLight;
|
||||
|
||||
[SerializeField] private float shootLightDuration = 0.1f;
|
||||
|
||||
[SerializeField] private LayerMask ignoreLayers;
|
||||
|
||||
private bool hasCloseTarget;
|
||||
|
||||
|
||||
private bool IsEnabled = false;
|
||||
|
||||
GameObject targetObject;
|
||||
|
||||
[SerializeField]
|
||||
GameObject targetObjectPrefab;
|
||||
[SerializeField]
|
||||
public GameObject projectilePrefab;
|
||||
[SerializeField]
|
||||
public string projectileName;
|
||||
[SerializeField]
|
||||
private Transform bulletSpawnPoint;
|
||||
[SerializeField]
|
||||
private float firePower = 20f;
|
||||
[SerializeField]
|
||||
private float maxProjectileDuration = 5f;
|
||||
[SerializeField]
|
||||
private float maxTargetObjDistance = 15f;
|
||||
[SerializeField]
|
||||
private VisualEffect shootEffect;
|
||||
[SerializeField]
|
||||
private Light shootLight;
|
||||
[SerializeField]
|
||||
private float shootLightDuration = 0.1f;
|
||||
private float timeSinceLightDuration = 0f;
|
||||
private bool IsEnabled;
|
||||
|
||||
private bool hasCloseTarget = false;
|
||||
[SerializeField]
|
||||
private LayerMask ignoreLayers;
|
||||
private GameObject targetObject;
|
||||
private float timeSinceLightDuration;
|
||||
public bool IsLightOn => targetingLight.gameObject.activeSelf;
|
||||
|
||||
//private Dictionary<int,float> projectiles = new Dictionary<int, float>();
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
timeSinceLightDuration += Time.deltaTime;
|
||||
}
|
||||
private float CalculateDrop(Vector3 origin,Vector3 destination,Vector3 force)
|
||||
{
|
||||
// Calculate the initial velocity required to reach the destination.
|
||||
Vector3 displacement = destination - origin;
|
||||
float time = Mathf.Sqrt(2f * displacement.magnitude / Physics.gravity.magnitude);
|
||||
Vector3 velocity = (displacement - 0.5f * Physics.gravity * time * time) / time + force;
|
||||
|
||||
// Calculate the height the object will reach during its flight.
|
||||
float maxHeight = origin.y + velocity.y * time - 0.5f * Physics.gravity.y * time * time;
|
||||
|
||||
// Calculate the distance the object will drop during its flight.
|
||||
float dropDistance = maxHeight - destination.y;
|
||||
|
||||
return dropDistance;
|
||||
}
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (shootLight.gameObject.activeSelf&&timeSinceLightDuration>shootLightDuration)
|
||||
{
|
||||
if (shootLight.gameObject.activeSelf && timeSinceLightDuration > shootLightDuration)
|
||||
shootLight.gameObject.SetActive(false);
|
||||
}
|
||||
if (aimMode==AimMode.CAMERA)
|
||||
if (aimMode == AimMode.CAMERA) targetObject.gameObject.transform.position = PlayerAim.active.targetPosition;
|
||||
if (IsEnabled && aimMode != AimMode.CAMERA)
|
||||
{
|
||||
targetObject.gameObject.transform.position = PlayerAim.active.targetPosition;
|
||||
}
|
||||
if (this.IsEnabled&&aimMode!=AimMode.CAMERA)
|
||||
{
|
||||
Ray ray = new Ray(transform.position, transform.up);
|
||||
var ray = new Ray(transform.position, transform.up);
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(ray, out hit, 50,ignoreLayers))
|
||||
if (Physics.Raycast(ray, out hit, 50, ignoreLayers))
|
||||
{
|
||||
|
||||
float hitDist = Vector3.Distance(hit.point, transform.position);
|
||||
var hitDist = Vector3.Distance(hit.point, transform.position);
|
||||
if (hitDist < maxTargetObjDistance)
|
||||
{
|
||||
targetObject.gameObject.transform.position = hit.point;
|
||||
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255, 0,0));
|
||||
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0]
|
||||
.SetColor("_EmissiveColor", new Color(255, 0, 0));
|
||||
//Track if we have a close target
|
||||
hasCloseTarget = true;
|
||||
hasCloseTarget = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
targetObject.gameObject.transform.position = transform.position + (ray.direction * maxTargetObjDistance);
|
||||
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255, 255,255));
|
||||
targetObject.gameObject.transform.position =
|
||||
transform.position + ray.direction * maxTargetObjDistance;
|
||||
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0]
|
||||
.SetColor("_EmissiveColor", new Color(255, 255, 255));
|
||||
//Track if we have a close target
|
||||
hasCloseTarget = false;
|
||||
}
|
||||
//float drop = CalculateDrop(this.bulletSpawnPoint.position, hit.point, this.transform.up * this.firePower);
|
||||
//print(drop);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
targetObject.gameObject.transform.position = transform.position + (ray.direction * maxTargetObjDistance);
|
||||
targetObject.gameObject.transform.position = transform.position + ray.direction * maxTargetObjDistance;
|
||||
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255,255,255));
|
||||
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0]
|
||||
.SetColor("_EmissiveColor", new Color(255, 255, 255));
|
||||
hasCloseTarget = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private float CalculateDrop(Vector3 origin, Vector3 destination, Vector3 force)
|
||||
{
|
||||
// Calculate the initial velocity required to reach the destination.
|
||||
var displacement = destination - origin;
|
||||
var time = Mathf.Sqrt(2f * displacement.magnitude / Physics.gravity.magnitude);
|
||||
var velocity = (displacement - 0.5f * Physics.gravity * time * time) / time + force;
|
||||
|
||||
// Calculate the height the object will reach during its flight.
|
||||
var maxHeight = origin.y + velocity.y * time - 0.5f * Physics.gravity.y * time * time;
|
||||
|
||||
// Calculate the distance the object will drop during its flight.
|
||||
var dropDistance = maxHeight - destination.y;
|
||||
|
||||
return dropDistance;
|
||||
}
|
||||
|
||||
public void Fire()
|
||||
{
|
||||
Fire(!hasCloseTarget);
|
||||
@ -131,71 +128,62 @@ public class PistolComponent : MonoBehaviour
|
||||
{
|
||||
shootLightDuration = 0;
|
||||
shootLight.gameObject.SetActive(true);
|
||||
GameObject projectile = Instantiate(projectilePrefab, this.bulletSpawnPoint);
|
||||
var projectile = Instantiate(projectilePrefab, bulletSpawnPoint);
|
||||
projectile.transform.localPosition = Vector3.zero;
|
||||
projectile.transform.localEulerAngles = Vector3.zero;
|
||||
projectile.transform.localScale = Vector3.one;
|
||||
Rigidbody pRigid = projectile.GetComponent<Rigidbody>();
|
||||
var pRigid = projectile.GetComponent<Rigidbody>();
|
||||
|
||||
/*Modified targeting system
|
||||
1. Since aim direction is vector from camera to ball (where player thinks its gonna go), raycast forward there, till hit. If no hit,
|
||||
then set target distance to ~50.
|
||||
2. Modify launch vector apply modified force
|
||||
*/
|
||||
Vector3 launchVector = pRigid.transform.up * this.firePower;
|
||||
var launchVector = pRigid.transform.up * firePower;
|
||||
|
||||
if(offsetWithTargetBall||aimMode==AimMode.MODIFIED)
|
||||
if (offsetWithTargetBall || aimMode == AimMode.MODIFIED)
|
||||
{
|
||||
Vector3 ballCamVector = targetObject.transform.position - this.GetComponentInParent<PlayerMovementController>().cam.transform.position;
|
||||
Ray r = new Ray();
|
||||
var ballCamVector = targetObject.transform.position -
|
||||
GetComponentInParent<PlayerMovementController>().cam.transform.position;
|
||||
var r = new Ray();
|
||||
r.origin = targetObject.transform.position;
|
||||
r.direction = ballCamVector.normalized;
|
||||
RaycastHit hit;
|
||||
if (Physics.Raycast(r,out hit,ignoreLayers))
|
||||
if (Physics.Raycast(r, out hit, ignoreLayers))
|
||||
{
|
||||
launchVector = (hit.point - pRigid.transform.position).normalized;
|
||||
launchVector *= this.firePower;
|
||||
launchVector *= firePower;
|
||||
}
|
||||
}
|
||||
else if(aimMode==AimMode.CAMERA)
|
||||
else if (aimMode == AimMode.CAMERA)
|
||||
{
|
||||
Vector3 target = PlayerAim.active.targetPosition;
|
||||
|
||||
Vector3 lv = target - pRigid.transform.position;
|
||||
var target = PlayerAim.active.targetPosition;
|
||||
|
||||
var lv = target - pRigid.transform.position;
|
||||
launchVector = lv.normalized;
|
||||
launchVector*= this.firePower;
|
||||
|
||||
launchVector *= firePower;
|
||||
}
|
||||
|
||||
pRigid.AddForce(launchVector, ForceMode.Impulse);
|
||||
projectile.transform.parent = null;
|
||||
shootEffect.Play();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
IsEnabled = true;
|
||||
if (targetObject == null)
|
||||
{
|
||||
targetObject = Instantiate(targetObjectPrefab);
|
||||
|
||||
}
|
||||
if (targetObject == null) targetObject = Instantiate(targetObjectPrefab);
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
IsEnabled = false;
|
||||
if (targetObject != null)
|
||||
{
|
||||
Destroy(targetObject);
|
||||
}
|
||||
if (targetObject != null) Destroy(targetObject);
|
||||
}
|
||||
|
||||
|
||||
public void LightToggle() {
|
||||
this.targetingLight.gameObject.SetActive(!this.targetingLight.gameObject.activeSelf);
|
||||
|
||||
public void LightToggle()
|
||||
{
|
||||
targetingLight.gameObject.SetActive(!targetingLight.gameObject.activeSelf);
|
||||
}
|
||||
public bool IsLightOn { get { return this.targetingLight.gameObject.activeSelf; } }
|
||||
|
||||
}
|
||||
}
|
@ -1,24 +1,21 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class FlareRegister : MonoBehaviour
|
||||
{
|
||||
public List<BulletComponent> bullets= new List<BulletComponent>();
|
||||
|
||||
public List<FlareBeacon> beacons= new List<FlareBeacon>();
|
||||
|
||||
public static FlareRegister instance;
|
||||
public List<BulletComponent> bullets = new();
|
||||
|
||||
public List<FlareBeacon> beacons = new();
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
instance = this;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
using System.Collections;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class ItemImageRef
|
||||
{
|
||||
public string name;
|
||||
@ -14,116 +14,100 @@ public class ItemImageRef
|
||||
|
||||
public class SpecialItemCycler : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private List<ItemImageRef> spawnableItems =new List<ItemImageRef>();
|
||||
[SerializeField]
|
||||
private List<ItemImageRef> shootableItems = new List<ItemImageRef>();
|
||||
[SerializeField] private List<ItemImageRef> spawnableItems = new();
|
||||
|
||||
[SerializeField] private List<ItemImageRef> shootableItems = new();
|
||||
|
||||
[SerializeField] private PlayerInteractionHandler interactionHandler;
|
||||
|
||||
[SerializeField] private PistolComponent pistol;
|
||||
|
||||
[SerializeField]
|
||||
private PlayerInteractionHandler interactionHandler;
|
||||
[SerializeField]
|
||||
private PistolComponent pistol;
|
||||
private int spawnableIndex = 0;
|
||||
private int shootableIndex = 0;
|
||||
[SerializeField]
|
||||
//private Inventory invent;
|
||||
private TempInventory invent;
|
||||
[SerializeField]
|
||||
private Image selectedImage;
|
||||
[SerializeField]
|
||||
private TMP_Text selectedQuantityText;
|
||||
|
||||
[SerializeField] private Image selectedImage;
|
||||
|
||||
[SerializeField] private TMP_Text selectedQuantityText;
|
||||
|
||||
private int shootableIndex;
|
||||
private int spawnableIndex;
|
||||
private Color sqtInitColor;
|
||||
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
sqtInitColor = selectedQuantityText.color;
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
private void Update()
|
||||
{
|
||||
if (interactionHandler.GunEnabled)
|
||||
{
|
||||
pistol.projectilePrefab = shootableItems[shootableIndex % shootableItems.Count].item;
|
||||
pistol.projectileName = shootableItems[shootableIndex % shootableItems.Count].name;
|
||||
}
|
||||
|
||||
SetImage();
|
||||
if (Input.GetButtonDown("CycleItems"))
|
||||
{
|
||||
if (interactionHandler.GunEnabled)
|
||||
{
|
||||
this.shootableIndex = (shootableIndex + 1) % shootableItems.Count;
|
||||
selectedImage.sprite = shootableItems[this.shootableIndex].icon;
|
||||
shootableIndex = (shootableIndex + 1) % shootableItems.Count;
|
||||
selectedImage.sprite = shootableItems[shootableIndex].icon;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.spawnableIndex = (spawnableIndex+1)%spawnableItems.Count;
|
||||
selectedImage.sprite = spawnableItems[this.spawnableIndex].icon;
|
||||
|
||||
spawnableIndex = (spawnableIndex + 1) % spawnableItems.Count;
|
||||
selectedImage.sprite = spawnableItems[spawnableIndex].icon;
|
||||
}
|
||||
|
||||
if (selectedImage.sprite == null)
|
||||
{
|
||||
selectedImage.color = new Color(selectedImage.color.r, selectedImage.color.g, selectedImage.color.b, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedImage.color = new Color(selectedImage.color.r, selectedImage.color.g, selectedImage.color.b, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (Input.GetButtonDown("TempPlace"))
|
||||
{
|
||||
if (invent.GetQuantityOf(spawnableItems[spawnableIndex].name)>0)
|
||||
if (!interactionHandler.GunEnabled && spawnableItems[spawnableIndex].item!= null)
|
||||
if (invent.GetQuantityOf(spawnableItems[spawnableIndex].name) > 0)
|
||||
if (!interactionHandler.GunEnabled && spawnableItems[spawnableIndex].item != null)
|
||||
{
|
||||
GameObject prefab = spawnableItems[spawnableIndex].item;
|
||||
GameObject instance = Instantiate(prefab,interactionHandler.CarryingPos);
|
||||
var prefab = spawnableItems[spawnableIndex].item;
|
||||
var instance = Instantiate(prefab, interactionHandler.CarryingPos);
|
||||
instance.transform.localPosition = Vector3.zero;
|
||||
instance.transform.parent = null;
|
||||
invent.Remove(spawnableItems[spawnableIndex].name);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void SetImage()
|
||||
private void SetImage()
|
||||
{
|
||||
|
||||
if (interactionHandler.GunEnabled)
|
||||
{
|
||||
|
||||
selectedImage.sprite = shootableItems[this.shootableIndex].icon;
|
||||
selectedQuantityText.text = invent.GetQuantityOf(shootableItems[this.shootableIndex].name).ToString();
|
||||
selectedImage.sprite = shootableItems[shootableIndex].icon;
|
||||
selectedQuantityText.text = invent.GetQuantityOf(shootableItems[shootableIndex].name).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
selectedImage.sprite = spawnableItems[this.spawnableIndex].icon;
|
||||
selectedQuantityText.text = invent.GetQuantityOf(spawnableItems[this.spawnableIndex].name).ToString();
|
||||
|
||||
selectedImage.sprite = spawnableItems[spawnableIndex].icon;
|
||||
selectedQuantityText.text = invent.GetQuantityOf(spawnableItems[spawnableIndex].name).ToString();
|
||||
}
|
||||
|
||||
if (selectedImage.sprite == null)
|
||||
{
|
||||
selectedImage.color = new Color(selectedImage.color.r, selectedImage.color.g, selectedImage.color.b, 0);
|
||||
selectedQuantityText.gameObject.SetActive(false);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedImage.color = new Color(selectedImage.color.r, selectedImage.color.g, selectedImage.color.b, 1);
|
||||
selectedQuantityText.gameObject.SetActive(true);
|
||||
if (selectedQuantityText.text == "0")
|
||||
{
|
||||
selectedQuantityText.color = Color.red;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedQuantityText.color = sqtInitColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user