void Can_handle_id_overflow_by_filling_spots() { ObjectTagger tagger = new ObjectTagger(10); List <object> handledObjects = new List <object>(); for (int i = 0; i < 9; i++) { var obj = new object(); tagger.GetOrCreateTag(obj); handledObjects.Add(obj); } // Ids are all used. handledObjects.Clear(); GC.Collect(2, GCCollectionMode.Forced, true); Thread.Sleep(100); // The next one is the already prepared next id. var obj10 = new object(); var tag10 = tagger.GetOrCreateTag(obj10); tag10.Should().Be(10ul); // The next after that will overflow. var obj1 = new object(); var tag1 = tagger.GetOrCreateTag(obj1); tag1.Should().Be(1ul); }
void Can_deliver_same_tag_for_same_instance() { ObjectTagger tagger = new ObjectTagger(); var obj = new object(); var tag1 = tagger.GetOrCreateTag(obj); var tag2 = tagger.GetOrCreateTag(obj); tag1.Should().Be(tag2); }
void Can_detect_id_overflow() { ObjectTagger tagger = new ObjectTagger(10); List <object> handledObjects = new List <object>(); for (int i = 0; i < 9; i++) { var obj = new object(); tagger.GetOrCreateTag(obj); handledObjects.Add(obj); } var lastObj = new object(); Assert.Throws <Exception>(() => { tagger.GetOrCreateTag(lastObj); }); }
public void TagAndLayerAll() { GameObject[] gameObjects = FindObjectsOfType(typeof(GameObject)) as GameObject[]; int objectsTagged = 0; foreach (GameObject g in gameObjects) { string needTag = ""; string needLayer = ""; objectsTagged = 0; if (g.tag != "Untagged") { needTag = g.tag; } if (LayerMask.LayerToName(g.layer) != "Default") { needLayer = LayerMask.LayerToName(g.layer); } if (needTag != "" || needLayer != "") { objectsTagged++; ObjectTagger ot = g.GetComponent <ObjectTagger>(); if (ot == null) { ot = g.AddComponent <ObjectTagger>(); } ot.objectTag = needTag; ot.objectLayer = needLayer; if (untagCurrentObjects) { g.tag = "Untagged"; g.layer = 0; } } } Debug.Log("ObjectTagger set on " + objectsTagged + " scene objects"); }