提尔锋

提尔锋

不要强迫矮人为你锻造武器。

武器

我尽力确保尽可能准确,但这并不能保证永不失误。每次它被“拔出”时,确实会杀死一个男人或女人,这里说的“拔出”是指被拿起。它不会生锈,它无法像切穿衣物那样轻易地切穿石头和铁。它不会成为三大邪恶的根源,并且最终会杀死你,除非你逃跑,而这一点你或许可以做到。

using BS;
using System.Collections.Generic;
using UnityEngine;

namespace Tyrfing
{
    public class ItemTyrfing : MonoBehaviour
    {
        public Item item;
        public Material runesMat;
        public MeshRenderer runesMesh;
        public Color runesColor;
        public Color runesEmission;
        public float resetTime = 30.0f;
        public float timeLeft = 30.0f;
        public bool timerOn = false;
        public bool killMode = false;

        protected void Awake()
        {
            item = this.GetComponent<Item>();
            item.OnUngrabEvent += OnUnGrab;
            item.OnGrabEvent += OnGrab;
            runesMesh = transform.Find("Mesh").Find("Models").Find("Runes").GetComponent(typeof(MeshRenderer)) as MeshRenderer;
            runesMat = runesMesh.material;
            item.rb.useGravity = true;
            item.data.grippable = true;
        }

        protected void Update()
        {
            if (timerOn)
            {
                timeLeft -= Time.deltaTime;
            }
            if (timeLeft < 0)
            {
                if(killMode == false)
                {
                    item.data.grippable = false;
                    item.rb.useGravity = false;
                    killMode = true;
                }
                item.transform.LookAt(Creature.player.transform);
                item.transform.position = item.transform.position + new Vector3(0, 0.03f, 0);
                float step = 2.5f * Time.deltaTime;
                item.transform.position = Vector3.MoveTowards(item.transform.position, Creature.player.transform.position, step);
                if (Vector3.Distance(item.transform.position, Creature.player.transform.position) < 0.5f)
                {
                    Creature.player.health.Kill();
                    MakeGlow(-10.0f);
                    item.rb.useGravity = true;
                    item.data.grippable = true;
                    timerOn = false;
                    timeLeft = resetTime;
                }
                 
            }
        }

        public void OnGrab(Handle handle, Interactor interactor)
        {
            MakeGlow(10.0f);
            timerOn = true;
            KillNearestTarget();
        }

        public void OnUnGrab(Handle handle, Interactor interactor, bool throwing)
        {
        }

        void MakeGlow(float amount)
        {
            runesMesh = transform.Find("Mesh").Find("Models").Find("Runes").GetComponent(typeof(MeshRenderer)) as MeshRenderer;
            runesMat = runesMesh.material;
            Color runesColor;
            ColorUtility.TryParseHtmlString("#FF0000", out runesColor);
            Color baseColor = runesColor;
            Color finalColor = baseColor * Mathf.LinearToGammaSpace(amount);
            runesMat.SetColor("_EmissionColor", finalColor);
        }

        void KillNearestTarget()
        {
            Creature target = Creature.player;
            float targetDistance = 10000000.0f;
            foreach (Creature target in Creature.list)
            {
                if (target != Creature.player)
                {
                    if (target.state != Creature.State.Dead)
                    {
                        if (Vector3.Distance(item.transform.position, target.transform.position) < targetDistance)
                        {
                            targetDistance = Vector3.Distance(item.transform.position, target.transform.position);
                            target = target;
                        }
                    }
                }
            }
            if (target != Creature.player)
            {
                target.health.Kill();
            }
        }
    }
}