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()!=null){ // Debug.Log(hit.GetComponent().pname +$" collected me at {transform.position}"); hit.GetComponent().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(); 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 } }