POW 锤 (U7)

POW 锤 (U7)

[Scripted weapon] 这款游戏严重缺乏超级马里奥主题武器,所以我制作了POW锤!用POW方块击中任何东西,将敌人击飞,就像在超级马里奥中一样!

武器

这是代码。如果你们感兴趣的话,我会进行注释(在评论中告诉我):

public class ItemPOW : MonoBehaviour
    {
        protected Item item;
        protected ItemModulePOW module;
        public float forceMultiplier;
        public Collider POW;
        public float POWTimer = 0f;
        public float cooldown = 0.5f;
        public int i = 0;
        protected void Awake()
        {
            item = this.GetComponent<Item>();
            POW = item.GetComponentsInChildren<Collider>()[2];
            item.CollisionEvent += OnPOWCollisionEvent;
            module = item.data.GetModule<ItemModulePOW>();
            forceMultiplier = module.forceMultiplier;
 
        }
        void OnPOWCollisionEvent(ref CollisionInstance collisionInstance)
        {
            if(collisionInstance.sourceCollider == POW || collisionInstance.targetCollider == POW)
            {
                if (POWTimer > cooldown)
                {
                    POWTimer = 0f;
                    foreach (Creature npc in Creature.list)
                    {
                        if (npc != Player)
                        {
                            if(npc.state == Creature.State.Alive || (npc.state == Creature.State.Stunned && npc.ragdoll.isGrounded) || (npc.state == Creature.State.Dead && npc.ragdoll.state == BS.Ragdoll.State.Dead))
                            {
                                if (npc.state == Creature.State.Alive)
                                {
                                    npc.ragdoll.SetState(BS.Ragdoll.State.Fallen);
                                }
                                if(npc.state == Creature.State.Dead)
                                {
                                    npc.ragdoll.SetState(BS.Ragdoll.State.Fallen);
                                }
                                foreach (RagdollPart ragdollPart in npc.ragdoll.parts)
                                {
                                    ragdollPart.rb.AddForce(Vector3.up * forceMultiplier, ForceMode.Impulse);
                                }
                            }
                        }
                    }
                }
            }         
        }
        void FixedUpdate()
        {
            foreach (Creature npc in Creature.list)
            {
                if(npc.ragdoll.isGrounded && npc.state == Creature.State.Dead)
                {
                    npc.ragdoll.state = BS.Ragdoll.State.Dead;
                    npc.ragdoll.isGrounded = false;
                }
            }
            POWTimer += Time.deltaTime;
            
        }
}