Exemplo n.º 1
0
        void AttackEnemy(float delta)
        {
            float distance = ServerMath.Distance(this, target);

            if (distance <= attackRange)
            {
                Quaternion rot = ServerMath.LookAt(this, target);
                ((MonsterSyncData)sync).SetRotate(rot.Y, rot.W);
                ((MonsterSyncData)sync).SetAnime(2);

                if (endMotion <= 0)
                {
                    startMotion += delta;
                    if (startMotion >= realAttackTime)
                    {
                        Attack(target, GetAutoAttackPower());
                        ObjectManager.AddBullet(this.GetObjID(), target.GetObjID());
                        startMotion = 0;
                        endMotion   = cooldownTime;
                    }
                }
            }
            else
            {
                ((MonsterSyncData)sync).SetRotate(init_yRot, init_wRot);
                ((MonsterSyncData)sync).SetAnime(0);
                target      = null;
                startMotion = 0;
            }
        }
Exemplo n.º 2
0
    void ReadSnapshot(NetIncomingMessage message)
    {
        byte count = message.ReadByte();

        for (int i = 0; i < count; i++)
        {
            HeroInitialData init = HeroInitialData.ReadData(message);
            HeroSyncData    sync = HeroSyncData.ReadData(message);
            ObjectManager.UpdateHero(init, sync);
        }

        count = message.ReadByte();
        for (int i = 0; i < count; i++)
        {
            CoreSyncData sync = CoreSyncData.ReadData(message);
            ObjectManager.UpdateCore(sync);
        }

        count = message.ReadByte();
        for (int i = 0; i < count; i++)
        {
            TowerSyncData sync = TowerSyncData.ReadData(message);
            ObjectManager.UpdateTower(sync);
        }

        count = message.ReadByte();
        List <SyncData> monsters = new List <SyncData>();

        for (int i = 0; i < count; i++)
        {
            monsters.Add(MonsterSyncData.ReadData(message));
        }
        ObjectManager.UpdateMonsters(monsters);

        count = message.ReadByte();
        List <SyncData> minions = new List <SyncData>();

        for (int i = 0; i < count; i++)
        {
            minions.Add(MinionSyncData.ReadData(message));
        }
        ObjectManager.UpdateMinions(minions);

        count = message.ReadByte();
        List <SyncData> abilities = new List <SyncData>();

        for (int i = 0; i < count; i++)
        {
            abilities.Add(AbilitySyncData.ReadData(message));
        }
        ObjectManager.UpdateAbilities(abilities);

        count = message.ReadByte();
        for (int i = 0; i < count; i++)
        {
            Bullet bullet = Bullet.ReadData(message);
            ObjectManager.AddBullet(bullet);
        }
    }
Exemplo n.º 3
0
        void AttackMove(float delta)
        {
            if (currentPath < relayPoints.Count)
            {
                Vector3 src  = new Vector3(GetXPos(), 0, GetZPos());
                Vector3 dest = new Vector3(relayPoints[currentPath].X, 0, relayPoints[currentPath].Y);
                if (Vector3.Distance(src, dest) < 0.2f)
                {
                    currentPath++;
                }
                else
                {
                    ServerSideObject target = ObjectManager.GetNearMinionsCoresTowersHeroes(this, attackRange);
                    if (target != null)
                    {
                        Quaternion rot = ServerMath.LookAt(this, target);
                        ((MinionSyncData)sync).SetRotate(rot.Y, rot.W);
                        ((MinionSyncData)sync).SetAnime(2);

                        if (endMotion <= 0)
                        {
                            startMotion += delta;
                            if (startMotion >= realAttackTime)
                            {
                                Attack(target, GetAutoAttackPower());
                                ObjectManager.AddBullet(this.GetObjID(), target.GetObjID());
                                startMotion = 0;
                                endMotion   = cooldownTime;
                            }
                        }
                    }
                    else
                    {
                        Quaternion rot = ServerMath.LookAt(src, dest);
                        ((MinionSyncData)sync).SetRotate(rot.Y, rot.W);
                        ((MinionSyncData)sync).SetAnime(1);

                        Vector3 direct = (dest - src);
                        direct.Normalize();
                        Vector3 newPos = src + direct * moveSpeed * delta;
                        ((MinionSyncData)sync).SetPosition(newPos.X, newPos.Z);
                    }
                }
            }
        }
Exemplo n.º 4
0
        void AttackEnemy(float delta)
        {
            ServerSideObject target = ObjectManager.GetNearMinionsHeroes(this, attackRange);

            if (target != null)
            {
                if (endMotion <= 0)
                {
                    startMotion += delta;
                    if (startMotion >= realAttackTime)
                    {
                        Attack(target, GetAutoAttackPower());
                        ObjectManager.AddBullet(this.GetObjID(), target.GetObjID());
                        startMotion = 0;
                        endMotion   = cooldownTime;
                    }
                }
            }
            else
            {
                startMotion = 0;
            }
        }