tModLoader I wonder how to make a check collision between blocks and NPCs?

Code:
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Terraria.ObjectData;
using Microsoft.Xna.Framework;

namespace Castleroid.NPCs
{
    public class gosma : ModNPC
    {
        int contador = 0;
        int segundos = 0;
        public override void SetDefaults()
        {
            npc.name = "Gosma";
            npc.displayName = "Gosma";
            npc.width = 18;
            npc.height = 40;
            npc.damage = 14;
            npc.defense = 6;
            npc.lifeMax = 200;
            npc.soundHit = 7;
            npc.soundKilled = 5;
            npc.noTileCollide = false;//colisões com pisos
            npc.value = 60f;
            npc.knockBackResist = 0f;//1.0f sem resistencia - 0.0000... quanto mais zeros mais resitente
            npc.aiStyle = -1;//Zerada a ai
        }

        public override float CanSpawn(NPCSpawnInfo spawnInfo)
        {
            return spawnInfo.spawnTileY < Main.rockLayer && !Main.dayTime ? 0.5f : 0f;
        }

        public override void AI()
        {
            npc.collideX = true;
            npc.collideY = true;
            contador += 1;

            float vel_x = npc.position.X;
            float vel_y = npc.position.Y;
            if(contador > 60){//60 numero de fps do jogo 60quadros por segundo
                segundos++;
                contador = 0;
            }
                if(segundos > 3){
                    //vel_x += 16;
                    vel_y -= 64;//plano cartesiano o ponto de horigem é diferente - 4 blocos altura
                    segundos = 0;
                }
            string s =  seconds.ToString();// converte variavel segundos para o formato de texto
            npc.position = new Vector2(vel_x,vel_y);
            Main.NewText(s, 255, 240, 20, false);// Texto com posicao x
           

        }

    }
}
 
You use 2 variables to manage counting? Pretty wasteful, but it works, I guess...
Also, you set the position, not the velocity. Change "npc.position = blah" to "npc.velocity = blah"
Setting the position will ignore tilecollisions because you can set the position inside of a block. Terraria handles tile collisions by checking that position plus the velocity it currently has, and checks if it collides that frame. If it does, it stops the NPC.
 
Thank you for your help...
Code:
            if(contador > 60){//60 numero de fps do jogo 60quadros por segundo
                segundos++;
                contador = 0;
            }
                if(segundos > 3){
                   npc.velocity.Y = -10;//jump power
                    segundos = 0;
                }
 
Back
Top Bottom