/// Create a new instance private Option <SpawnedObject> NewInstance(NTransform origin) { if (_limit) { if (_instances.Count >= _limit.Unwrap()) { return(Option.None <SpawnedObject>()); } } var rtn = Scene.Spawn(_factory); if (rtn) { var gp = rtn.Unwrap(); var instance = new SpawnedObject { GameObject = gp, Origin = origin, Renderer = gp.GetComponentInChildren <Renderer>() }; ApplyTransform(instance); _instances.Add(instance); return(Option.Some(instance)); } return(Option.None <SpawnedObject>()); }
/// Remove a game object from this target public void Remove(GameObject target) { if (Target.GameObject == target) { Target = null; } }
/// Return the next free instance private Option <SpawnedObject> NextFree(NTransform origin) { SpawnedObject match = null; foreach (var instance in _instances) { if (!instance.GameObject.activeSelf) { match = instance; break; } } if (match != null) { match.GameObject.SetActive(true); match.Origin = origin; ApplyTransform(match); return(Option.Some(match)); } return(Option.None <SpawnedObject>()); }
/// Apply a transform private void ApplyTransform(SpawnedObject target) { target.GameObject.transform.position = target.Origin.Position; target.GameObject.transform.rotation = target.Origin.Rotation; target.GameObject.transform.localScale = target.Origin.Scale; }
/// Create a new instance public SingleSpawned(SpawnedObject target) { Target = target; Target.GameObject.transform.name = "SpawnedObject"; }
/// Create a new instance private Option<SpawnedObject> NewInstance(NTransform origin) { if (_limit) { if (_instances.Count >= _limit.Unwrap()) { return Option.None<SpawnedObject>(); } } var rtn = Scene.Spawn(_factory); if (rtn) { var gp = rtn.Unwrap(); var instance = new SpawnedObject { GameObject = gp, Origin = origin, Renderer = gp.GetComponentInChildren<Renderer>() }; ApplyTransform(instance); _instances.Add(instance); return Option.Some(instance); } return Option.None<SpawnedObject>(); }