示例#1
0
    private void DrawLink(int srcID, int dstID)
    {
        Handles.color = Color.blue;

        IDRef srcIDRef = level.idDictionary[srcID];
        IDRef dstIDRef = level.idDictionary[dstID];

        if (srcIDRef == null || srcIDRef.objectRef == null)
        {
            return;
        }
        if (dstIDRef == null || dstIDRef.objectRef == null)
        {
            return;
        }

        //draw main line
        Vector3 src = srcIDRef.objectRef.transform.position;
        Vector3 dst = dstIDRef.objectRef.transform.position;

        Handles.DrawLine(src, dst);

        //draw arrow tip to indicate direction
        Vector3    center     = (src + dst) / 2f;
        Quaternion q          = Quaternion.LookRotation(dst - src);
        Vector3    leftArrow  = new Vector3(-1f, 0f, -1f);
        Vector3    rightArrow = new Vector3(1f, 0f, -1f);
        float      arrowSize  = (dst - src).magnitude / 20f;

        Handles.DrawLine(center, center + q * leftArrow * arrowSize);
        Handles.DrawLine(center, center + q * rightArrow * arrowSize);
    }
示例#2
0
    private void Trigger()
    {
        //sync this trigger press over the network if necessary
        if (permanent && !permanentTriggered)
        {
            permanentTriggered = true;
            UFLevel.SyncTrigger(ownID);
        }

        if (resetsRemaining > 0)
        {
            resetsRemaining--;
        }
        else if (resetsRemaining == 0)
        {
            return;
        }

        insideTime = -resetDelay;
        buttonTime = 0f;

        foreach (int link in links)
        {
            Activate(link);
        }

        if (switchRef >= 0)
        {
            IDRef     swtch = UFLevel.GetByID(switchRef);
            UFClutter s     = swtch.objectRef.GetComponent <UFClutter>();
            s.Activate(true);
        }
    }
示例#3
0
    public static void SetObject(int id, GameObject objectRef)
    {
        IDRef idRef = GetByID(id);

        if (idRef != null)
        {
            idRef.SetObject(objectRef);
        }
        else
        {
            Debug.LogWarning("Tried to set object to id reference that does not exist: " + id);
        }
    }
示例#4
0
 private void SetID(int id, IDRef.Type type)
 {
     if (idDictionary.Count <= id)
     {
         if (idDictionary.Capacity <= id)
         {
             idDictionary.Capacity = id + 1;
         }
         for (int i = idDictionary.Count; i <= id; i++)
         {
             idDictionary.Add(null);
         }
     }
     idDictionary[id] = new IDRef(id, type);
 }
示例#5
0
    public static void Deactivate(int id)
    {
        IDRef obj = TryGetObject(id);

        if (obj == null)
        {
            return;
        }

        switch (obj.type)
        {
        case IDRef.Type.Event:
            obj.objectRef.GetComponent <UFEvent>().Deactivate();
            break;
        }
    }
示例#6
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        if (UFLevel.singleton != level)
        {
            GUILayout.Label("This level is inactive.");
        }
        else if (level.idDictionary == null)
        {
            GUILayout.Label("ID Dictionary not initialized. ");
        }
        else
        {
            GUILayout.Label("Number of available IDs: " + level.idDictionary.Count);

            findID = EditorGUILayout.IntField("Search ID: ", findID);

            IDRef obj = UFLevel.GetByID(findID);
            if (obj == null)
            {
                GUILayout.Label("Invalid ID");
            }
            else
            {
                GUILayout.Label("Found reference type: " + obj.type.ToString());
                if (obj.objectRef != null)
                {
                    GUILayout.Label(obj.objectRef.name);
                    if (GUILayout.Button("Select game object"))
                    {
                        Selection.activeGameObject = obj.objectRef;
                    }
                }
                else
                {
                    GUILayout.Label("Object is not in scene.");
                }
            }

            drawLinks = GUILayout.Toggle(drawLinks, "Draw links");
        }
    }
示例#7
0
    private static IDRef TryGetObject(int id)
    {
        IDRef toReturn = UFLevel.GetByID(id);

        if (toReturn == null)
        {
            Debug.LogWarning("Tried to link to non existant ID: " + id);
            return(null);
        }

        GameObject obj = toReturn.objectRef;

        if (obj == null)
        {
            Debug.LogWarning("Tried to link to ID that is not in the scene: " + toReturn.id + ", of type " + toReturn.type);
            return(null);
        }

        return(toReturn);
    }
示例#8
0
    private void DrawLinks()
    {
        for (int i = 0; i < level.idDictionary.Count; i++)
        {
            IDRef idRef = level.idDictionary[i];
            if (idRef == null)
            {
                continue;
            }

            switch (idRef.type)
            {
            case IDRef.Type.Event:
                foreach (int j in idRef.objectRef.GetComponent <UFEvent>().links)
                {
                    DrawLink(i, j);
                }
                break;

            case IDRef.Type.Trigger:
                foreach (int j in idRef.objectRef.GetComponent <UFTrigger>().links)
                {
                    DrawLink(i, j);
                }
                break;

            case IDRef.Type.Keyframe:
                foreach (UFLevelStructure.Keyframe k in idRef.objectRef.GetComponent <UFMover>().keys)
                {
                    if (k.triggerID >= 0)
                    {
                        DrawLink(i, k.triggerID);
                    }
                }
                break;
            }
        }
    }
示例#9
0
    /// <summary>
    /// Tries to activate an object in the scene with the given ID.
    /// Logs warnings if the ID is invalid for any reason.
    /// Set positive to false to deactivate.
    /// </summary>
    public static void Activate(int id, bool positive = true)
    {
        IDRef obj = TryGetObject(id);

        if (obj == null)
        {
            Debug.LogWarning("Could not activated id " + id + " since it does not exist!");
            return;
        }

        try {
            switch (obj.type)
            {
            case IDRef.Type.Trigger:
                obj.objectRef.GetComponent <UFTrigger>().Trigger();
                break;

            case IDRef.Type.Keyframe:
                obj.objectRef.GetComponentInParent <UFMover>().Activate(positive);
                break;

            case IDRef.Type.Event:
                obj.objectRef.GetComponent <UFEvent>().Activate(positive);
                break;

            case IDRef.Type.ParticleEmitter:
                obj.objectRef.GetComponent <UFParticleEmitter>().Activate(positive);
                break;

            case IDRef.Type.BoltEmitter:
                obj.objectRef.GetComponent <UFBoltEmitter>().Activate(positive);
                break;

            case IDRef.Type.Clutter:
                obj.objectRef.GetComponent <UFClutter>().Activate(positive);
                break;

            case IDRef.Type.Light:
                obj.objectRef.GetComponent <UnityEngine.Light>().enabled = positive;
                break;

            case IDRef.Type.AmbSound:
                AudioSource sound = obj.objectRef.GetComponent <AudioSource>();
                if (positive)
                {
                    sound.Play();
                }
                else
                {
                    sound.Stop();
                }
                break;

            case IDRef.Type.Brush:
                obj.objectRef.GetComponent <UFMover>().Activate(positive);
                break;

            default:
                Debug.LogWarning("Tried activating object with unkown funcionality: "
                                 + obj + ", of type " + obj.type);
                break;
            }
        }
        catch (System.NullReferenceException) {
            Debug.LogError("Failed to activate id " + id + ", of type "
                           + obj.type + ", since it had an unexpected structure.");
        }
    }
示例#10
0
    private string GetInfo(RaycastHit hit)
    {
        if (hit.collider == null)
        {
            return("Void");
        }
        Transform target = hit.collider.transform;

        if (target.GetComponent <Collider>().isTrigger)
        {
            UFForceRegion force = target.GetComponent <UFForceRegion>();
            if (force != null)
            {
                switch (force.type)
                {
                case UFForceRegion.ForceType.AddVel:
                    return("Push region");

                case UFForceRegion.ForceType.Climb:
                    switch (force.soundType)
                    {
                    case UFLevelStructure.ClimbingRegion.ClimbingType.Fence:
                        return("Climbable\nFence");

                    case UFLevelStructure.ClimbingRegion.ClimbingType.Ladder:
                        return("Ladder");

                    case UFLevelStructure.ClimbingRegion.ClimbingType.Undefined:
                        return("Climbable");
                    }
                    break;

                case UFForceRegion.ForceType.SetVel:
                    return("Jump pad");
                }
            }

            UFLiquid liquid = target.GetComponent <UFLiquid>();
            if (liquid != null)
            {
                switch (liquid.type)
                {
                case UFLevelStructure.Room.LiquidProperties.LiquidType.Acid:
                    return("Acid");

                case UFLevelStructure.Room.LiquidProperties.LiquidType.Lava:
                    return("Lava");

                case UFLevelStructure.Room.LiquidProperties.LiquidType.Water:
                    return("Water");

                case UFLevelStructure.Room.LiquidProperties.LiquidType.Undefined:
                    return("Unkown\nLiquid");
                }
            }

            UFTrigger trig = target.GetComponent <UFTrigger>();
            if (trig != null)
            {
                if (trig.requireUseKey)
                {
                    if (trig.resetsRemaining == 0)
                    {
                        return("Spent\nButton\nArea");
                    }
                    else
                    {
                        return("Button\nArea");
                    }
                }

                foreach (int link in trig.links)
                {
                    IDRef idRef = UFLevel.GetByID(link);
                    switch (idRef.type)
                    {
                    case IDRef.Type.Event:
                        UFEvent eventRef = idRef.objectRef.GetComponent <UFEvent>();

                        switch (eventRef.type)
                        {
                        case UFLevelStructure.Event.EventType.Continuous_Damage:
                            bool insta = eventRef.int1 <= 0 || eventRef.int1 >= 100;
                            if (insta)
                            {
                                return("Death\nTrigger");
                            }
                            else
                            {
                                return("Damage\nArea");
                            }

                        case UFLevelStructure.Event.EventType.Teleport_Player:
                        case UFLevelStructure.Event.EventType.Teleport:
                            return("Teleporter");
                        }
                        break;
                    }
                }

                return("Trigger");
            }

            /*
             * if(target.GetComponentInParent<UFPlayerInfo>())
             *  return "Level\nBounds";
             */

            if (target.GetComponentInParent <MapFinish>())
            {
                return("Finish\nTrigger");
            }
        }
        else
        {
            if (target.name.StartsWith("StaticVisible"))
            {
                return("Solid");
            }

            if (target.name.StartsWith("StaticIcy"))
            {
                return("Slippery");
            }

            if (target.name.StartsWith("StaticInvisible"))
            {
                if (hit.normal.y > .7f)
                {
                    return("Invisible\nFloor");
                }
                else if (hit.normal.y < -.7f)
                {
                    return("Invisible\nCeiling");
                }
                else
                {
                    return("Invisible\nWall");
                }
            }

            if (target.parent != null)
            {
                switch (target.parent.name)
                {
                case "Scrollers":
                    return("Scroller");

                case "PortalGeometry":
                    return("Illegal\nGeometry");

                case "Moving geometry":
                    return("Mover");
                }
            }

            UFClutter clutter = target.GetComponentInParent <UFClutter>();
            if (clutter != null)
            {
                if (clutter.isSwitch)
                {
                    return("Switch");
                }
                else if (clutter.life <= 0f)
                {
                    return("Solid\nClutter");
                }
                else
                {
                    return("Destru-\nctible\nClutter");
                }
            }

            UFDestructible destr = target.GetComponent <UFDestructible>();
            if (destr != null)
            {
                string life    = UFUtils.GetShortFormat(destr.currentLife, 4);
                string maxLife = UFUtils.GetShortFormat(destr.life, 4);
                return("Destru-\nctible\n" + life + "/" + maxLife);
            }

            if (target.name.ToLower().Contains("help"))
            {
                return("Secret\nFix");
            }
        }

        Debug.Log("Could not recognize target: " + target);
        return("Unkown");
    }