public override void TransitionFired(PetrinetTransition transition) { foreach (var a in ChangeOnFired) { a.SetActive(!a.activeSelf); } }
private void Fired(PetrinetTransition transition, bool successfully) { if (successfully && Transitions.Contains(transition)) { TransitionFired(transition); } }
private void Colorize(PetrinetTransition transition, List <Renderer> rends) { var firstPlaceIn = transition.In.FirstOrDefault(i => i.Type == PetrinetCondition.ConditionType.Place); if (firstPlaceIn != null) { var houseLinker = firstPlaceIn.GetComponent <HouseLinker>(); if (houseLinker != null) { houseLinker.ColorizeThis(rends); } } }
protected bool CanTriggerFirstAble(out PetrinetTransition first) { var ret = false; first = null; if (GlobalTriggerAreaForAllTransitions == null) { } else if (GlobalTriggerAreaForAllTransitions.bounds.Contains(Controller.transform.position)) { ret = true; } else { var forward = Controller.transform.forward; switch (TransitionTrigger) { case Trigger.Point: RaycastHit info; if (GlobalTriggerAreaForAllTransitions.Raycast(new Ray(Controller.transform.position, forward), out info, 10f)) { ret = true; } break; case Trigger.Proximity: var distance = GlobalTriggerAreaForAllTransitions.bounds.Contains(Controller.transform.position) ? 0f : Vector3.Distance(Controller.transform.position, GlobalTriggerAreaForAllTransitions.ClosestPointOnBounds(Controller.transform.position)); if (distance < TriggerDistance) { ret = true; } break; } } if (!ret) { return(false); } first = Transitions.FirstOrDefault(t => t.GetConditionsFulfilled().Values.Any(v => v)); if (first == null) { ret = false; } return(ret); }
protected bool CanTriggerClosest(out PetrinetTransition closest) { var forward = Controller.transform.forward; var distanceClosest = float.MaxValue; closest = null; for (var i = 0; i < TriggerAreasPerTransition.Count; i++) { if (!TriggerAreasPerTransition[i].gameObject.activeSelf) { continue; } switch (TransitionTrigger) { case Trigger.Point: RaycastHit info; if (TriggerAreasPerTransition[i].bounds.Contains(Controller.transform.position)) { distanceClosest = 0f; closest = Transitions[i]; } if (TriggerAreasPerTransition[i].Raycast(new Ray(Controller.transform.position, forward), out info, 10f)) { if (info.distance < distanceClosest) { distanceClosest = info.distance; closest = Transitions[i]; } } break; case Trigger.Proximity: var distance = TriggerAreasPerTransition[i].bounds.Contains(Controller.transform.position) ? 0f : Vector3.Distance(Controller.transform.position, TriggerAreasPerTransition[i].ClosestPointOnBounds(Controller.transform.position)); if (distance < distanceClosest) { distanceClosest = distance; closest = Transitions[i]; } break; } } return(distanceClosest < TriggerDistance); }
public abstract void TransitionFired(PetrinetTransition transition);
//public bool sadfsadf; //new void Update() //{ // base.Update(); // Debug.Log("1 " + Transitions[0].Name); // if (sadfsadf) // { // Debug.Log("2 " + Transitions[0].Name); // sadfsadf = false; // var transitionsReady = Transitions.Where(r => r.GetConditionsFulfilled().All(v => v.Value)); // var firstReady = transitionsReady.FirstOrDefault(); // if (firstReady == null) // return; // Colorize(firstReady, OutsideRenderer); // } //} public override void TransitionFired(PetrinetTransition transition) { base.TransitionFired(transition); HideStuff(); }
public void TryTakePicture(Vector2 size, PetrinetTransition transition, bool forceRadius, bool takeNewPhoto) { if (_picturesTaken == null) { _picturesTaken = new Dictionary <PetrinetTransition, Texture2D>(); } if (!_picturesTaken.ContainsKey(transition) || takeNewPhoto) { var go = transition.PreviewObject; var oldPos = go.transform.localPosition; // var oldRot = go.transform.localRotation; var oldActive = go.activeSelf; go.transform.position = transform.position; // go.transform.rotation = transition.GetPreviewRotation(); go.SetActive(true); Cam.transform.position = transition.PhotoFrom.position; ////localPosition = -transition.GetPreviewPosition();// new Vector3(-size.x, Height, -size.y);// * (1f + transition.PreviewExtraDistance); Cam.transform.LookAt(transition.PhotoTo); //transform.position);//transform.position + Vector3.up * 0.5f); //Cam.transform.localPosition = Cam.transform.localPosition - Cam.transform.forward * 1.0f; Cam.Render(); go.transform.localPosition = oldPos; // go.transform.localRotation = oldRot; go.SetActive(oldActive); var was = RenderTexture.active; RenderTexture.active = _renderTex; // width and height, chosen to match the source r.t. var tex = new Texture2D(_renderTex.width, _renderTex.height, TextureFormat.ARGB32, false); // Grab everything tex.ReadPixels(new Rect(0f, 0f, _renderTex.width, _renderTex.height), 0, 0); tex.Apply(); RenderTexture.active = was; //PhotoMaterial var rend = transition.Preview.GetComponentInChildren <Renderer>(); //rend.texture = null; var mat = new Material(PhotoMaterial); mat.SetTexture("_MainTex", tex); //mat.SetTexture("_Mask", tex); var scale = new Vector2(1f, 1f);//new Rect(0f, 0f, 1f, 1f)); var offset = new Vector2(0f, 0f); if (!forceRadius) { var h = transition.GetComponent <HardwareRequirements>(); offset = h.Requirement.x < h.Requirement.y ? new Vector2((1f - h.Requirement.x / h.Requirement.y) / 2f, 0f) : new Vector2(0f, (1f - h.Requirement.y / h.Requirement.x) / 2f); scale = h.Requirement.x < h.Requirement.y ? new Vector2(h.Requirement.x / h.Requirement.y, 1f) : new Vector2(1f, h.Requirement.y / h.Requirement.x); } mat.SetTextureOffset("_MainTex", offset); mat.SetTextureScale("_MainTex", scale); rend.material = mat; if (_picturesTaken.ContainsKey(transition)) { _picturesTaken.Remove(transition); } _picturesTaken.Add(transition, tex); } }
protected virtual bool CanTrigger(out PetrinetTransition transition) { transition = null; return(InsideTriggerField() && (CanTriggerFirstAble(out transition) || CanTriggerClosest(out transition))); }
public override void TransitionFired(PetrinetTransition transition) { }
public void RegisterInteraction(PetrinetTransition obj, bool valid) { _nextInteraction.Add(obj); _nextInteractionsValid.Add(valid); }