Steam lobby implemented

This commit is contained in:
Madhav Kapa
2023-06-01 08:03:48 -07:00
parent c7647c8097
commit 49efee80e2
95 changed files with 10258 additions and 6167 deletions

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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; } }
}
}

View File

@ -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()
{
}
}
}

View File

@ -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;
}
}
}
}
}