Ejemplo n.º 1
0
 public override IEnumerator TryAIUse(AIController ai, Effector effect)
 {
     if (Vector2Int.Distance(actor.location, ai.pc.location) < 1.5)
     {
         battle.Log(actor + " used " + skill.skillName);
         EightDir dir = EightDirExtensions.DirectionOf(ai.pc.location - actor.location);
         return(effect.ExecuteDirectionRoutine(dir));
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 2
0
    public List <Vector2Int> PointsAlongPath(Vector2Int a, Vector2Int b)
    {
        List <Vector2Int> results = new List <Vector2Int>();
        Vector2Int        at      = a;
        int i = 0;

        do
        {
            i  += 1;
            at += EightDirExtensions.DirectionOf(b - at).XY();
            results.Add(at);
        } while (at != b && i < 1000);
        if (i > 1000)
        {
            Debug.Assert(false, "major fuckup");
        }
        return(results);
    }
Ejemplo n.º 3
0
 public EightDir DirectionTo(MapEvent other)
 {
     return(EightDirExtensions.DirectionOf(other.location - location));
 }
Ejemplo n.º 4
0
    public IEnumerator StepRoutine(Vector2Int at, Vector2Int to, bool faceTo = true)
    {
        footOffset = !footOffset;
        if (faceTo)
        {
            facing = EightDirExtensions.DirectionOf(to - at);
        }
        else
        {
            locked = true;
        }
        Vector3 startPx = parent.TileToWorldCoords(at);

        targetPx = parent.TileToWorldCoords(to);
        if (targetPx.y == startPx.y || GetComponent <MapEvent3D>() == null)
        {
            yield return(parent.LinearStepRoutine(at, to));
        }
        else if (targetPx.y > startPx.y)
        {
            // jump up routine routine
            startPx         = parent.transform.position;
            parent.tracking = true;
            float duration = (targetPx - startPx).magnitude / parent.CalcTilesPerSecond() * JumpHeightUpMult;
            yield return(JumpRoutine(startPx, targetPx, duration));

            overrideBodySprite = FrameBySlot(0, DirectionRelativeToCamera().Ordinal()); // "prone" frame
            yield return(CoUtils.Wait(1.0f / parent.CalcTilesPerSecond() / 2.0f));

            overrideBodySprite = null;
        }
        else
        {
            // jump down routine
            parent.tracking = true;
            float elapsed      = 0.0f;
            float walkRatio    = 0.65f;
            float walkDuration = walkRatio / parent.CalcTilesPerSecond();
            while (true)
            {
                float t = elapsed / walkDuration;
                elapsed += Time.deltaTime;
                parent.transform.position = new Vector3(
                    startPx.x + t * (targetPx.x - startPx.x) * walkRatio,
                    startPx.y,
                    startPx.z + t * (targetPx.z - startPx.z) * walkRatio);
                parent.SetCameraTrackerLocation(parent.transform.position);
                if (elapsed >= walkDuration)
                {
                    break;
                }
                yield return(null);
            }
            float dy           = targetPx.y - startPx.y;
            float jumpDuration = Mathf.Sqrt(dy / Gravity) * JumpHeightDownMult;
            bool  isBigDrop    = dy <= -1.0f;
            yield return(JumpRoutine(parent.transform.position, targetPx, jumpDuration, isBigDrop));

            if (isBigDrop)
            {
                overrideBodySprite = FrameBySlot(2, DirectionRelativeToCamera().Ordinal()); // "prone" frame
                yield return(CoUtils.Wait(JumpHeightDownMult / parent.CalcTilesPerSecond() / 2.0f));

                overrideBodySprite = null;
            }
        }
        parent.tracking = false;
        locked          = false;
    }
Ejemplo n.º 5
0
 public EightDir DirectionTo(Vector2Int location)
 {
     return(EightDirExtensions.DirectionOf(location - this.location));
 }