forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using _PROJECT.Scripts.Bow;
 | 
						|
using _PROJECT.Scripts.Bow.Extra;
 | 
						|
using FishNet.Object;
 | 
						|
using FishNet.Object.Synchronizing;
 | 
						|
using UnityEngine;
 | 
						|
using Random = UnityEngine.Random;
 | 
						|
 | 
						|
public class ArcheryTarget : NetworkBehaviour, IArrowHittable
 | 
						|
{
 | 
						|
    public GameObject pointsText;
 | 
						|
    [SyncVar]
 | 
						|
    public Vector3 endPosition;
 | 
						|
    public float forwardSpeed = 2f;
 | 
						|
    public Action<float> addScore;
 | 
						|
    
 | 
						|
    private bool _flipDirection;
 | 
						|
 | 
						|
    private void Awake()
 | 
						|
    {
 | 
						|
        _flipDirection = Random.value > 0.5f;
 | 
						|
    }
 | 
						|
 | 
						|
    // Update is called once per frame
 | 
						|
    void Update()
 | 
						|
    {
 | 
						|
        if (!IsServer) return;
 | 
						|
        float step = forwardSpeed * Time.deltaTime;
 | 
						|
        var position = transform.position;
 | 
						|
 | 
						|
        if (Math.Abs(position.x - endPosition.x) < 0.1) Destroy(gameObject);
 | 
						|
 | 
						|
        
 | 
						|
        transform.position = Vector3.MoveTowards(position,
 | 
						|
            new Vector3(endPosition.x, position.y, position.z), step);
 | 
						|
    }
 | 
						|
 | 
						|
    public void Hit(Arrow arrow)
 | 
						|
    {
 | 
						|
        if (!IsServer) return;
 | 
						|
        if (arrow == null) return;
 | 
						|
 | 
						|
        var position = transform.position;
 | 
						|
 | 
						|
        float score = (float)Math.Round(Vector3.Distance(position, endPosition));
 | 
						|
        addScore(score);
 | 
						|
 | 
						|
        GameObject prefab = Instantiate(pointsText, position, Quaternion.Euler(0, 90f, 0), null);
 | 
						|
        PointsText target = prefab.GetComponent<PointsText>();
 | 
						|
        target.SetPoints(score);
 | 
						|
        Spawn(prefab);
 | 
						|
 | 
						|
        Despawn(arrow.gameObject, DespawnType.Pool);
 | 
						|
        Despawn(gameObject, DespawnType.Pool);
 | 
						|
    }
 | 
						|
} |