UPF/Assets/Game/Scripts/Minigame/PickupItem.cs
2022-12-14 01:49:10 +05:30

142 lines
4.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
using CustomExtensions;
public class PickupItem : NetworkBehaviour
{
public PickupType type;
public float radius=1;
public Color gizmoColor = Color.green;
public bool active = true;
private Vector3 position;
public GameObject PickupEffect;
void Start(){
position = transform.position;
newPosition= transform.position;
movementTime = Random.Range(0.7f,1f);
}
Vector3 newPosition;
float posTimer = 0;
float movementTime = 0;
void Update()
{
if(!isServer){
// transform.position = Vector3.Lerp(transform.position, new Vector3(position.x + ((radius/2f) * Random.Range(-1f,1f)),position.y + ((radius/2f) * Random.Range(-1f,1f))),0.01f);
if(posTimer < movementTime){
posTimer+=Time.deltaTime;
}else{
newPosition = new Vector3(position.x + ((radius/2f) * Random.Range(-1f,1f)),position.y + ((radius/2f)));
posTimer= 0;
}
transform.position = Vector3.Lerp(transform.position, newPosition, 0.008f * movementTime);
return;
}
if(!active){return;}
Collider2D hit = Physics2D.OverlapCircle(transform.position, radius);
if(hit!=null && hit.GetComponent<SpaceshipController>()!=null){
// Debug.Log(hit.GetComponent<SpaceshipController>().pname +$" collected me at {transform.position}");
hit.GetComponent<SpaceshipController>().CollectPickup(type);
active=false;
Deactivate(hit.transform);
}
}
public void Reposition(Vector3 newPosition){
if(isServer){
reposition(newPosition);
RpcReposition(newPosition);
}else{
CmdReposition(newPosition);
}
}
[Command]
void CmdReposition(Vector3 newPosition){
reposition(newPosition);
RpcReposition(newPosition);
}
[ClientRpc]
void RpcReposition(Vector3 newPosition){
reposition(newPosition);
}
void reposition(Vector3 newPosition){
active=true;
transform.position = newPosition;
position= newPosition;
gameObject.SetActive(true);
}
public void Deactivate(Transform playerPos){
if(isServer){
deactivate(playerPos);
RpcDeactivate(playerPos);
}else{
CmdDeactivate(playerPos);
}
}
void deactivate(Transform playerPos){
active=false;
// gameObject.SetActive(false);
StartCoroutine(MoveToPlayer(playerPos));
SceneData.GameManager.DeactivatePickupItem(this);
}
IEnumerator MoveToPlayer(Transform position){
float speed = 0.01f;
while(Vector3.Distance(position.position, transform.position) > 1f){
transform.position = Vector3.Lerp(transform.position, position.position, speed);
speed+= 0.01f;
yield return new WaitForEndOfFrame();
}
if(!isServer){
ParticleSystem particle = EffectPool.Spawn(PickupEffect, transform.position).GetComponent<ParticleSystem>();
particle.startColor = type.GetColor();
}
gameObject.SetActive(false);
}
[Command]
void CmdDeactivate(Transform playerPos){
deactivate(playerPos);
RpcDeactivate(playerPos);
}
[ClientRpc]
void RpcDeactivate(Transform playerPos){
deactivate(playerPos);
}
private void OnDrawGizmos() {
Gizmos.color = gizmoColor;
Gizmos.DrawWireSphere(transform.position,radius);
}
public enum PickupType{
Star,
Star2,
Star3,
Star4,
Star5,
Moon1,
Moon2,
Moon3,
Moon4,
Moon5,
Twep
}
}