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); }
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); } }
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); } }
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); }
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; } }
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"); } }
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); }
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; } } }
/// <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."); } }
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"); }