public void Setup() { if (!activeFromStart) { model.material = disabledMaterial; currentState = PistonState.Forward; } else { model.material = activeMaterial; currentState = PistonState.Backward; } colliderToCheck = GetComponent <Collider>(); CalculateRaySpacing(); if (direction == PistonDirection.Vertical) { initialPosition = waypointStart.position.y; targetPosition = waypoint.position.y; } else if (direction == PistonDirection.Horizontal) { initialPosition = waypointStart.position.x; targetPosition = waypoint.position.x; } else if (direction == PistonDirection.Platform) { initialPosition = waypointStart.position.z; targetPosition = waypoint.position.z; } }
/// <summary> /// Simulate Engine Operation /// </summary> public void EngineOperate(double milSecPerFrame) { // Every frame we have a random piston speed because of random engine RPM double MPH = CalculatePistonSpeed(); // Just a conversion from MPH to IPMS double IPMS = ConvertMPHToIPMS(MPH); // Calculate piston traveled distance per frame double distanceTraveled = IPMS * milSecPerFrame; // Before updating with new piston state, get previous state PistonState prevPistonState = _piston.GetState(); // Negative travel distance if piston is moving from top to bottom if (prevPistonState == PistonState.TopToMid || prevPistonState == PistonState.MidToBot || prevPistonState == PistonState.Top) { distanceTraveled *= -1; } // Update piston state _piston.UpdatePistonStates(distanceTraveled, MPH); // Implement spark plug control via event // Activate spark plug if new piston state is at top, else deactivate spark plug. _piston.PistonStateChangeEvent += _piston_PistonStateChangeEvent; // Print info. to console PrintParams(); }
// Use this for initialization void Start() { state = PistonState.Waiting; PistonAnimation.Play("Idle"); NextActivationDuration = InitialOffset; if(RandomMin != RandomMax) NextActivationDuration += Random.Range(RandomMin, RandomMax); }
/// <summary> /// Piston State Change Event handler /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _piston_PistonStateChangeEvent(object sender, PistonState e) { if (e == PistonState.Top) { _sprakPlug.Ignition(); } else { _sprakPlug.StopIgnition(); } }
// Use this for initialization void Start() { state = PistonState.Waiting; PistonAnimation.Play("Idle"); NextActivationDuration = InitialOffset; if (RandomMin != RandomMax) { NextActivationDuration += Random.Range(RandomMin, RandomMax); } }
//This callback is called when the user selects an element in the Add Element dropdown menu void OnReorderableListAddDropdownClick(object target) { PistonState state = (PistonState)target; int index = m_List.serializedProperty.arraySize; m_List.serializedProperty.arraySize++; m_List.index = index; SerializedProperty element = m_List.serializedProperty.GetArrayElementAtIndex(index); element.FindPropertyRelative("Name").stringValue = state.Name; element.FindPropertyRelative("DelayAfterwards").floatValue = 0f; serializedObject.ApplyModifiedProperties(); }
public Piston(double displacement) { if (displacement <= 0) { throw new Exception("Piston stroke is invalid"); } // Set initial state of piston to bottom _state = PistonState.Bot; // Set position of piston _curDisplacement = -displacement / 2; // Set speed _speed = 0; // Set stroke _displacement = displacement; }
private void StartWorking() { if (path != null) { _currentPoint = path.GetPathEnumerator(); _currentPoint.MoveNext(); if (_currentPoint.Current == null) { return; } transform.position = _currentPoint.Current.position; } _isReadyToMove = false; startTime = 0; _isStarting = true; state = PistonState.Splash; //StartCoroutine("StartWorking"); }
public void UpdatePistonStates(double traveledDistance, double speed) { _curDisplacement += traveledDistance; _speed = speed; if (_curDisplacement >= _displacement / 2) { _state = PistonState.Top; _curDisplacement = _displacement / 2; _speed = 0; } else if (_curDisplacement <= -1) { _state = PistonState.Bot; _curDisplacement = -_displacement / 2; _speed = 0; } else if (_curDisplacement >= 0 && _curDisplacement < _displacement / 2 && traveledDistance > 0) { _state = PistonState.MidToTop; } else if (_curDisplacement <= 0 && _curDisplacement > -_displacement / 2 && traveledDistance < 0) { _state = PistonState.MidToBot; } else if (_curDisplacement >= 0 && _curDisplacement < _displacement / 2 && traveledDistance < 0) { _state = PistonState.TopToMid; } else if (_curDisplacement <= 0 && _curDisplacement > -_displacement / 2 && traveledDistance > 0) { _state = PistonState.BotToMid; } PistonStateChangeEvent?.Invoke(this, _state); }
// Update is called once per frame void Update() { switch(state) { case PistonState.Waiting: if(!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if(RunningTime > NextActivationDuration) { PistonAnimation.Play("Hit"); state = PistonState.Extending; NextActivationDuration = 0.0f; RunningTime = 0.0f; } } break; case PistonState.Extending: if(!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if(RunningTime > NextActivationDuration) { state = PistonState.Extended; NextActivationDuration = ExtendedWaitTime; if(RandomMin != RandomMax) NextActivationDuration += Random.Range(RandomMin, RandomMax); RunningTime = 0.0f; } } break; case PistonState.Extended: if(!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if(RunningTime > NextActivationDuration) { state = PistonState.Retracting; PistonAnimation.Play ("Retract"); NextActivationDuration = 0.0f; RunningTime = 0.0f; } } break; case PistonState.Retracting: if(!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if(RunningTime >= NextActivationDuration) { state = PistonState.Waiting; PistonAnimation.Play ("Idle"); NextActivationDuration = IdleWaitTime; if(RandomMin != RandomMax) NextActivationDuration += Random.Range(RandomMin, RandomMax); RunningTime = 0.0f; } } break; } }
// Update is called once per frame void Update() { switch (state) { case PistonState.Waiting: if (!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if (RunningTime > NextActivationDuration) { PistonAnimation.Play("Hit"); state = PistonState.Extending; NextActivationDuration = 0.0f; RunningTime = 0.0f; } } break; case PistonState.Extending: if (!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if (RunningTime > NextActivationDuration) { state = PistonState.Extended; NextActivationDuration = ExtendedWaitTime; if (RandomMin != RandomMax) { NextActivationDuration += Random.Range(RandomMin, RandomMax); } RunningTime = 0.0f; } } break; case PistonState.Extended: if (!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if (RunningTime > NextActivationDuration) { state = PistonState.Retracting; PistonAnimation.Play("Retract"); NextActivationDuration = 0.0f; RunningTime = 0.0f; } } break; case PistonState.Retracting: if (!IsAnyAnimPlaying()) { RunningTime += Time.deltaTime; if (RunningTime >= NextActivationDuration) { state = PistonState.Waiting; PistonAnimation.Play("Idle"); NextActivationDuration = IdleWaitTime; if (RandomMin != RandomMax) { NextActivationDuration += Random.Range(RandomMin, RandomMax); } RunningTime = 0.0f; } } break; } }
public void Update() { if (_isReadyToMove == true) { if (_currentPoint == null || _currentPoint.Current == null) { return; } var speed = state == PistonState.Splash ? returningSpeed : splashSpeed; if (Type == FollowType.MoveTowards) { transform.position = Vector3.MoveTowards(transform.position, _currentPoint.Current.position, Time.deltaTime * speed); } else if (Type == FollowType.Lerp) { transform.position = Vector3.Lerp(transform.position, _currentPoint.Current.position, Time.deltaTime * speed); } var distance = (transform.position - _currentPoint.Current.position).sqrMagnitude; if (distance < maxDistance * maxDistance) { float delay; if (state == PistonState.Splash) { delay = delayBetweenSplash; state = PistonState.Return; if (killingZone != null) { killingZone.SetEnabled(); } if (_forceTurnOff) { _isReadyToMove = false; _forceTurnOff = false; if (_forceTurnOn) { _forceTurnOn = false; StartWorking(); } else { this.enabled = false; } } } else { delay = returningDelay; state = PistonState.Splash; if (killingZone != null) { killingZone.SetDisabled(); } } StartCoroutine("Move", delay); } } else if (_isStarting) { if (Mathf.Abs(startTime -= Time.deltaTime) > startDelay) { _isStarting = false; _isReadyToMove = true; } } }
public override void MoveBehaviour() { if (activeFromStart) { if (currentState == PistonState.Forward) { movementVelocity = new Vector3(0, -downMovementSpd, 0); } else if (currentState == PistonState.Backward) { movementVelocity = new Vector3(0, upMovementSpd, 0); } CheckMovementCollisions(movementVelocity * Time.deltaTime); transform.Translate(movementVelocity * Time.deltaTime); if (currentState == PistonState.Forward) { if (direction == PistonDirection.Vertical && Vector3.up == transform.up && transform.position.y <= targetPosition) { sfxCtrl.PlayClip(); stompVFX.Play(); currentState = PistonState.Backward; } else if (direction == PistonDirection.Vertical && Vector3.up != transform.up && transform.position.y >= targetPosition) { sfxCtrl.PlayClip(); stompVFX.Play(); currentState = PistonState.Backward; } else if (direction == PistonDirection.Horizontal && Vector3.left == transform.up && transform.position.x >= targetPosition) { sfxCtrl.PlayClip(); stompVFX.Play(); currentState = PistonState.Backward; } else if (direction == PistonDirection.Horizontal && Vector3.left != transform.up && transform.position.x <= targetPosition) { sfxCtrl.PlayClip(); stompVFX.Play(); currentState = PistonState.Backward; } else if (direction == PistonDirection.Platform) { if ((Vector3.forward == transform.up && transform.position.z <= targetPosition) || (Vector3.forward != transform.up && transform.position.z >= targetPosition)) { currentState = PistonState.Backward; } } } if (currentState == PistonState.Backward) { if (direction == PistonDirection.Vertical && Vector3.up == transform.up && transform.position.y >= initialPosition) { currentState = PistonState.Forward; } else if (direction == PistonDirection.Vertical && Vector3.up != transform.up && transform.position.y <= initialPosition) { currentState = PistonState.Forward; } else if (direction == PistonDirection.Horizontal && Vector3.left == transform.up && transform.position.x <= initialPosition) { currentState = PistonState.Forward; } else if (direction == PistonDirection.Horizontal && Vector3.left != transform.up && transform.position.x >= initialPosition) { currentState = PistonState.Forward; } else if (direction == PistonDirection.Platform) { if ((Vector3.forward == transform.up && transform.position.z >= initialPosition) || (Vector3.forward != transform.up && transform.position.z <= initialPosition)) { currentState = PistonState.Forward; } } } } }
public BlockActionPiston(byte byte1, byte byte2, int blockType) { PistonState = (PistonState)byte1; PistonDirection = (PistonDirection)byte2; BlockType = blockType; }
public void SetPistonAction(int x, int y, int z, PistonState state, PistonDirection direction) { X = x; Y = y; Z = z; DataA = (sbyte)state; DataB = (sbyte)direction; }
public BlockActionPiston(byte byte1, byte byte2, int blockType) { PistonState = (PistonState) byte1; PistonDirection = (PistonDirection) byte2; BlockType = blockType; }