Beispiel #1
0
    void bulletProcess(SkillBullet n)
    {
        switch (n.target)
        {
        case SkillTarget.Target.Unit:
        {
            Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet;
            bt.setParam(mUnit.pos, mUnit.dir, mUnit);
            bt.mOwner = mUnit.guid;
            bt.mHarm  = n.harm;
            Vector3 projDir = n.locationDir(mUnit);
            projDir.y = 0;
            bt.play(projDir.normalized, mUnit.skill.targetGUID);
            break;
        }

        case SkillTarget.Target.Dir:
        {
            Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet;
            bt.setParam(mUnit.pos, mUnit.dir, mUnit);
            bt.mOwner = mUnit.guid;
            bt.mHarm  = n.harm;
            Vector3 projDir = n.locationDir(mUnit);
            projDir.y = 0;
            bt.play(projDir.normalized, mUnit.skill.targetGUID);
            break;
        }

        case SkillTarget.Target.Pos:
        {
            Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet;
            bt.setParam(mUnit.pos, mUnit.dir, mUnit);
            bt.mOwner = mUnit.guid;
            bt.mHarm  = n.harm;
            bt.play(n.locationPos(mUnit), mUnit.skill.targetGUID);
            break;
        }

        case SkillTarget.Target.Area:
        {
            Matrix4x4   mt    = Matrix4x4.TRS(mUnit.pos, Quaternion.LookRotation(mUnit.dir), Vector3.one).inverse;
            List <Unit> units = mUnit.mgr.getUnitInArea(UnitType.Monster | UnitType.Player, n.area, mt);
            for (int i = 0; i < units.Count; ++i)
            {
                Bullet bt = mUnit.mgr.getUnit(0, UnitType.Bullet, n.id) as Bullet;
                bt.setParam(mUnit.pos, mUnit.dir, mUnit);
                bt.mOwner = mUnit.guid;
                bt.mHarm  = n.harm;
                bt.play(units[i].pos, units[i].guid);
            }
            break;
        }
        }
    }