protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } var isCloseEnough = entity.transform.position.y - SeaLevel < 0.02f; if (elapsedTime >= Duration && isCloseEnough) { InvokeControllerFinished(entity); return; } var percent = elapsedTime.TotalMilliseconds / Duration.TotalMilliseconds; var reverse = 1 - percent; // create impact wave form, with slight depth offset, since we wont start at 0. var sin = -Math.Sin(percent * Math.PI * 16 * reverse + Math.PI / 6); // reduce amplitude above the sea level, we can't fly var strength = sin < 0 ? Strength : Strength / 1.5; // reduce amplitude exponentially strength *= (float) reverse * (float) reverse; // add amplitude modulation to wave var offset = (float) (strength * sin); // apply offset to sealevel depth var p = entity.transform.position; entity.transform.position = new Vector3(p.x, SeaLevel + offset, p.z); elapsedTime += TimeSpan.FromSeconds(Time.deltaTime); }
protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } var isCloseEnough = entity.transform.position.IsCloseEnoughTo(target.transform.position, IsYAxisIgnored); if (isCloseEnough) { if (IsFinishedOnCatchup) { InvokeControllerFinished(entity); } return; } elapsedTime = elapsedTime.Add(TimeSpan.FromSeconds(Time.deltaTime)); var currentPosition = entity.transform.position; var targetPosition = target.transform.position; var direction = CalculateDirectonalVector(targetPosition, currentPosition); var normalizedDirection = direction; normalizedDirection.Normalize(); var offset = entity.Speed * Time.deltaTime; var movementVector = normalizedDirection * offset; entity.transform.position = entity.transform.position + movementVector; var lookAtCoords = target.transform.position; if (IsPitchLocked) { lookAtCoords.y = entity.transform.position.y; } entity.transform.LookAt(lookAtCoords); }
protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } var isCloseEnough = entity.transform.position.IsCloseEnoughTo(targetPosition); if (isCloseEnough) { return; } // v = s / t // s = v * t var currentPosition = entity.transform.position; var direction = targetPosition - currentPosition; var normalizedDirection = direction; normalizedDirection.Normalize(); var offset = entity.Speed * Time.deltaTime; var movementVector = normalizedDirection * offset; entity.transform.position = entity.transform.position + movementVector; if (lookAt) { entity.gameObject.transform.LookAt(entity.transform.position + normalizedDirection); } }
protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } var offset = Convert.ToSingle(Math.Sin(Time.timeSinceLevelLoad)) * 1.4f; var pos = entity.transform.position; entity.transform.position = new Vector3(pos.x, SeaLevel + offset, pos.z); }
public ArcMovementController(EntityBehaviour start, GameObject target, int flatness) { TimeSinceStart = TimeSpan.Zero; MovingStartPosition = start.transform.position; MovingEndPosition = target.transform.position; Flatness = flatness; MovingCenterPosition = GetCenter (); Distance = (MovingStartPosition - MovingEndPosition).magnitude; // v = s / t MovingTime = Distance / start.Speed; Target = target; IsMoving = true; }
protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } duration += Time.deltaTime; var offset = Convert.ToSingle(Math.Sin(Time.timeSinceLevelLoad)) * 2.0f; var pos = entity.transform.position; entity.transform.position = new Vector3(startPosition.x + offset, pos.y, pos.z); var to = Quaternion.FromToRotation(entity.transform.up, Vector3.up); entity.transform.rotation = Quaternion.Slerp(entity.transform.rotation, to, duration * speed); }
public BalloonFloatingController(EntityBehaviour entity) { speed = 0.03f; startPosition = entity.transform.position; }
protected override void UpdateOverride(EntityBehaviour entity) { if (IsFinished || entity == null) { return; } MovingObject = entity.gameObject.transform; if (IsMoving) { TimeSinceStart = TimeSinceStart.Add (TimeSpan.FromSeconds ((double)Time.deltaTime)); if (TimeSinceStart.TotalSeconds >= MovingTime) { IsMoving = false; InvokeControllerFinished(entity); return; } Rotate(); Move (); } }
public SinkEffect(EntityBehaviour entity) { this.entity = entity; }