static void Main() { ValueSwap ob = new ValueSwap(); int x = 10, y = 20; Console.WriteLine("x and y before call: " + x + " " + y); ob.Swap(ref x, ref y); Console.WriteLine("x and y after call: " + x + " " + y); }
public static void SwapSceneEnemies(Scene scene, Random rng) { List <int> Actors = GetSceneEnemyActors(scene); if (Actors.Count == 0) { return; } List <int> Objects = GetSceneEnemyObjects(scene); if (Objects.Count == 0) { return; } // if actor doesn't exist but object does, probably spawned by something else List <int> ObjRemove = new List <int>(); foreach (int o in Objects) { List <Enemy> ObjectMatch = EnemyList.FindAll(u => u.Object == o); bool exists = false; for (int i = 0; i < ObjectMatch.Count; i++) { exists |= Actors.Contains(ObjectMatch[i].Actor); } if (!exists) { ObjRemove.Add(o);; } } foreach (int o in ObjRemove) { Objects.Remove(o); } List <ValueSwap[]> ActorsUpdate = new List <ValueSwap[]>(); List <ValueSwap> ObjsUpdate; List <List <Enemy> > Updates; List <List <Enemy> > Matches; while (true) { ObjsUpdate = new List <ValueSwap>(); Updates = new List <List <Enemy> >(); Matches = new List <List <Enemy> >(); int oldsize = 0; int newsize = 0; for (int i = 0; i < Objects.Count; i++) { Updates.Add(EnemyList.FindAll(u => ((u.Object == Objects[i]) && (Actors.Contains(u.Actor))))); Matches.Add(GetMatchPool(Updates[i], rng)); int k = rng.Next(Matches[i].Count); int newobj = Matches[i][k].Object; newsize += Matches[i][k].ObjectSize; oldsize += Updates[i][0].ObjectSize; ValueSwap NewObject = new ValueSwap(); NewObject.OldV = Objects[i]; NewObject.NewV = newobj; ObjsUpdate.Add(NewObject); } if (newsize <= oldsize) { //this should take into account map/scene size and size of all loaded actors... //not really accurate but *should* work for now to prevent crashing break; } } for (int i = 0; i < ObjsUpdate.Count; i++) { int j = 0; while (j != Actors.Count) { Enemy Old = Updates[i].Find(u => u.Actor == Actors[j]); if (Old != null) { List <Enemy> SubMatches = Matches[i].FindAll(u => u.Object == ObjsUpdate[i].NewV); int l; while (true) { l = rng.Next(SubMatches.Count); if ((Old.Type == SubMatches[l].Type) && (Old.Stationary == SubMatches[l].Stationary)) { break; } else { if ((Old.Type == SubMatches[l].Type) && (rng.Next(5) == 0)) { break; } } if (SubMatches.FindIndex(u => u.Type == Old.Type) == -1) { break; } } ValueSwap NewActor = new ValueSwap(); NewActor.OldV = Actors[j]; NewActor.NewV = SubMatches[l].Actor; ValueSwap NewVar = new ValueSwap(); NewVar.NewV = SubMatches[l].Variables[rng.Next(SubMatches[l].Variables.Count)]; ActorsUpdate.Add(new ValueSwap[] { NewActor, NewVar }); Actors.RemoveAt(j); } else { j++; } } } SetSceneEnemyActors(scene, ActorsUpdate); SetSceneEnemyObjects(scene, ObjsUpdate); SceneUtils.UpdateScene(scene); }