Example #1
0
            public override void AI(SMNPC mnpc)
            {
                var worm = (WormBodyNPC)(mnpc);

                npc.realLife = worm.Head.npc.realLife;
                mnpc.SetState <AttackState>();
            }
Example #2
0
            public override void AI(SMNPC mnpc)
            {
                var wmnpc = mnpc as WormFakeHead;

                //唯一目标
                if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead)
                {
                    npc.TargetClosest(true);
                }
                wmnpc.MoveToPlayer();
            }
Example #3
0
            public override void AI(SMNPC mnpc)
            {
                var wmnpc = mnpc as WormHead;

                //唯一目标
                if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead)
                {
                    npc.TargetClosest(true);
                }
                if (mnpc.Timer >= 60 && mnpc.Timer < 80)
                {
                    if (wmnpc.npc.velocity.Y < 20)
                    {
                        wmnpc.npc.velocity.Y += 0.5f;
                    }
                }
                else
                {
                    wmnpc.MoveToPlayer();
                }
                mnpc.Timer++;
                if (mnpc.Timer == 360)
                {
                    foreach (var n in Main.npc)
                    {
                        if (n.active && n.realLife == npc.whoAmI)
                        {
                            if (n.type == ModContent.NPCType <WormFakeHead>())
                            {
                                var wormHead = n.modNPC as WormBodyNPC;
                                wormHead.SetState <WormFakeHead.MergeState>();
                            }
                        }
                    }
                }
                else if (mnpc.Timer > 360)
                {
                    if (wmnpc.npc.velocity.Y < 20)
                    {
                        wmnpc.npc.velocity.Y += 0.5f;
                    }
                    foreach (var n in Main.npc)
                    {
                        if (n.active && n.realLife == npc.whoAmI && n.type == ModContent.NPCType <WormFakeHead>())
                        {
                            return;
                        }
                    }
                    mnpc.Timer = 0;
                    mnpc.SetState <NormalAttack>();
                }
            }
Example #4
0
            public override void AI(SMNPC mnpc)
            {
                var worm = (WormBodyNPC)(mnpc);

                npc.velocity = Vector2.Normalize(worm.Head.npc.Center - npc.Center) * 30f;
                if (npc.Hitbox.Intersects(worm.Head.npc.Hitbox))
                {
                    // 接上去
                    worm.Tail.Head = worm.Head;
                    // 把上一个尾巴咬掉
                    worm.Head.Tail.npc.active = false;
                    worm.Head.Tail            = worm.Tail;
                    // 自己也死掉
                    npc.active = false;
                }
            }
Example #5
0
            public override void AI(SMNPC mnpc)
            {
                var wmnpc = mnpc as WormHead;

                //唯一目标
                if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead)
                {
                    npc.TargetClosest(true);
                }
                if (mnpc.Timer >= 0 && mnpc.Timer < 80)
                {
                    if (wmnpc.npc.velocity.Y < 20)
                    {
                        wmnpc.npc.velocity.Y += 0.5f;
                    }
                }
                else
                {
                    wmnpc.MoveToPlayer();
                }
                mnpc.Timer++;
                if (mnpc.Timer == 400)
                {
                    WormBodyNPC cur = mnpc as WormBodyNPC;
                    for (int i = 0; i < 45; i++)
                    {
                        WormBodyNPC nxt = cur.Tail;
                        if (i % 6 == 5)
                        {
                            var lastHead = cur.Head;
                            var newHead  = SpawnWormPart(cur.npc, ModContent.NPCType <WormFakeHead>());
                            newHead.npc.velocity = Main.rand.NextVector2CircularEdge(1, 1) * 25f;
                            newHead.Head         = cur.Head;
                            newHead.Tail         = cur;
                            cur.Head             = newHead;

                            var newTail = SpawnWormPart(cur.npc, ModContent.NPCType <WormTail>());
                            newTail.Head  = lastHead;
                            lastHead.Tail = newTail;
                        }
                        cur = nxt;
                    }
                    mnpc.Timer = 0;
                    mnpc.SetState <SplitAttack>();
                }
            }
Example #6
0
            public override void AI(SMNPC mnpc)
            {
                npc.realLife = npc.whoAmI;
                int         length = 50;
                WormBodyNPC cur    = (WormBodyNPC)mnpc;

                for (int i = 0; i < length; i++)
                {
                    int type = (i == length - 1) ? ModContent.NPCType <WormTail>() : ModContent.NPCType <WormBody>();
                    var part = SpawnWormPart(npc, type);
                    part.npc.realLife     = npc.realLife;
                    part.Head             = cur;
                    GetWorm(cur.npc).Tail = part;
                    // 每个蠕虫身体维护双向链表,前驱和后继
                    cur = part;
                }
                mnpc.SetState <NormalAttack>();
            }
Example #7
0
 public MergeState(SMNPC npc) : base(npc)
 {
 }
Example #8
0
 public SpawnState(SMNPC npc) : base(npc)
 {
 }
Example #9
0
 public AttackState(SMNPC npc) : base(npc)
 {
 }
Example #10
0
 public SplitAttack(SMNPC npc) : base(npc)
 {
 }
Example #11
0
 public override void AI(SMNPC mnpc)
 {
     mnpc.SetState <NormalAttack>();
 }
Example #12
0
 public override void AI(SMNPC mnpc)
 {
 }
Example #13
0
 public Split(SMNPC npc) : base(npc)
 {
 }
Example #14
0
 public NormalAttack(SMNPC npc) : base(npc)
 {
 }