コード例 #1
0
        public void UpdatePosition()
        {
            if (StartTime > Time.time)
            {
                return;
            }

            if (!alreadyCreated)
            {
                CreateProjectile();
            }

            if (projectileGameObject == null)
            {
                return;
            }

            float secondsSinceStart = Time.time - StartTime;

            float feetTraveled = SpeedFeetPerSecond * secondsSinceStart;

            if (feetTraveled > totalTravelDistanceInFeet)
            {
                TriggerCollision();
                DestroyProjectile();
                readyToDelete        = true;
                projectileGameObject = null;
                return;
            }

            float percentTraveled = feetTraveled / totalTravelDistanceInFeet;

            // Linear:
            // Projectile.transform.position = SourcePosition + direction * Talespire.Convert.FeetToTiles(feetTraveled);

            // Bezier path:
            projectileGameObject.transform.position = bezierPath.CalculateBezierPoint(0, pathTimeCurve.Evaluate(percentTraveled));
            projectileGameObject.transform.LookAt(bezierPath.CalculateBezierPoint(0, pathTimeCurve.Evaluate(percentTraveled + 0.01f)));

            float scaleAtTime = 1f;

            if (sizeCurve != null)
            {
                scaleAtTime = sizeCurve.Evaluate(percentTraveled);
            }

            float newScale = scaleAtTime * ProjectileSizeMultiplier;

            if (newScale != projectileGameObject.transform.localScale.x && newScale != 0)
            {
                projectileGameObject.transform.localScale = new Vector3(newScale, newScale, newScale);                  // Assuming a uniformly-scaled effect!
                if (particleSystems != null)
                {
                    foreach (ParticleSystemDetails particleSystemDetails in particleSystems)
                    {
                        particleSystemDetails.Scale(newScale);
                    }
                }
            }
        }
コード例 #2
0
ファイル: Player.cs プロジェクト: Wumpf/penguinpirate
    IEnumerator Jump(Vector3 destination)
    {
        JumpTimer = 0.0f;

        // Compute jump spline
        List <Vector3> points = new List <Vector3>();

        points.Add(this.transform.position);
        points.Add(new Vector3(this.transform.position.x, this.transform.position.y + JUMP_HEIGHT, this.transform.position.z));
        points.Add(new Vector3(destination.x, this.transform.position.y + JUMP_HEIGHT, this.transform.position.z));
        points.Add(destination);

        BezierPath bezierPath = new BezierPath();

        bezierPath.SetControlPoints(points);
        List <Vector3> drawingPoints = bezierPath.GetDrawingPoints0();

        destination.y          = transform.position.y;
        LastJumpDirectionWorld = destination - transform.position;
        LastJumpDirectionWorld.Normalize();

        while (transform.parent == null)         // Not yet reattached to an icefloe
        {
            transform.position = bezierPath.CalculateBezierPoint(0, JumpTimer);
            transform.forward  = Vector3.Slerp(-LastJumpDirectionWorld, transform.forward, Mathf.Exp(-Time.time * 0.1f));
            JumpTimer         += Time.fixedDeltaTime / JUMP_DURATION;

            if (GetComponent <Collider>().bounds.max.y < IceFloe.SUNK_HEIGHT)
            {
                Debug.Log("Player has jumped into the water. You lost.");
                gameController.gameEndStatus();
                yield return(null);
            }

            yield return(new WaitForFixedUpdate());
        }
        yield return(null);
    }
コード例 #3
0
    private IEnumerator TweenCoroutine(float p_duration)
    {
        float fStartTime = Time.time;
        float t          = 0;

        while (t <= 1)
        {
            t = (Time.time - fStartTime) / p_duration;

            Vector3 point = m_bezier.CalculateBezierPoint(0, t);

            MoveObject(point);

            yield return(null);
        }

        if (m_callback != null)
        {
            m_callback();
        }

        ResetValues();
    }
コード例 #4
0
        private void LateUpdate()
        {
            if (_path == null)
            {
                return;
            }

            if (stage == 0)
            {
                stage++;
            }
            else if (stage == 1)
            {
                EnableRenderers(true);
                int index = 0;
                while (true)
                {
                    if (index >= bones.Length)
                    {
                        stage++;
                        break;
                    }
                    if (index == 0)
                    {
                        transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time));
                        transform.LookAt(_path.CalculateBezierPoint(0, animCurve.Evaluate(time + 0.01f)));
                    }
                    bones[index].transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time - (index * boneDistance)));
                    index++;
                }
            }
            else if (stage == 2)
            {
                stage++;
            }
            else if (stage != 3)
            {
                if (stage == 4)
                {
                    Creature creature;
                    EnableRenderers(false);
                    impact.transform.position = _targetPosition;
                    impact.transform.LookAt(impact.transform.position + transform.forward);
                    impact.Play(true);
                    if (_castingCreature.TryGetCreatureFromTarget(EndTarget, out creature))
                    {
                        creature.AttackTargetCreature(impact.transform.forward);
                    }
                    if (SimpleSingletonBehaviour <CameraController> .HasInstance)
                    {
                        TS_CameraShaker.CallPushInDirection(0.1f, impact.transform.forward);
                    }
                    stage++;
                }
            }
            else
            {
                int index = 0;
                while (true)
                {
                    if (index >= bones.Length)
                    {
                        time += Time.deltaTime;
                        if (time > 1f)
                        {
                            stage++;
                        }
                        if (!drizzle.isEmitting)
                        {
                            drizzle.Clear(true);
                            drizzle.Play(true);
                        }
                        break;
                    }
                    if (index == 0)
                    {
                        transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time));
                        transform.LookAt(_path.CalculateBezierPoint(0, animCurve.Evaluate(time + 0.01f)));
                    }
                    bones[index].transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time - (index * boneDistance)));
                    index++;
                }
            }
            TryPlayImpactAudio(time);
        }