142 lines
4.0 KiB
C#
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
|
|
}
|
|
}
|
|
|