Esempio n. 1
0
    private void Compile(InputBuildContext context)
    {
        context.info.compilerCount++;

        ConnectionSetCompiler compiler = context.connCompiler;
        List <Component>      items    = context.components;
        List <byte>           areas    = context.areas;

        int count = 0;

        for (int i = 0; i < items.Count; i++)
        {
            Component item = items[i];

            if (item is OFMConnection)
            {
                OFMConnection conn = (OFMConnection)item;
                byte          area = (conn.OverrideArea ? conn.Area : areas[i]);

                compiler.Add(conn.StartPoint.ToVector3(), conn.EndPoint.ToVector3()
                             , conn.Radius
                             , conn.IsBidirectional
                             , area
                             , conn.Flags
                             , (uint)conn.UserId);

                count++;
            }
        }

        context.Log(string.Format("Compiled off-mesh connections: {0}", count), this);
    }
    private bool ProcessPost(InputBuildContext context)
    {
        if (!ProcessValidation(context))
        {
            return(false);
        }

        context.info.postCount++;

        if (areas.Count == 0)
        {
            context.Log("No area/flag maps.  No action taken.", this);
            return(true);
        }

        ConnectionSetCompiler conns = context.connCompiler;

        bool applied = false;

        for (int i = 0; i < areas.Count; i++)
        {
            byte   area = areas[i];
            ushort flag = (ushort)flags[i];

            int marked = 0;

            for (int iConn = 0; iConn < conns.Count; iConn++)
            {
                OffMeshConnection conn = conns[iConn];

                if (conn.area == area)
                {
                    conn.flags  |= flag;
                    conns[iConn] = conn;
                    marked++;
                }
            }

            if (marked > 0)
            {
                string msg = string.Format(
                    "Added '0x{0:X}' flags to {1} connections with the area {2}."
                    , flag, marked, area);

                context.Log(msg, this);

                applied = true;
            }
        }

        if (!applied)
        {
            context.Log("No flags applied.", this);
        }

        return(true);
    }