Example #1
0
File: Agent.cs Project: kijun/art
    public void RunAnimation(
        string keyPath,
        AnimationCurve curve,
        // TODO create a new struct
        Location propLocation = Location.None,
        float propProbability = 0,
        float propDelay       = 0)
    {
        var lockFlag = AnimationKeyPath.ToTileMutexFlag(keyPath);

        mutex |= lockFlag;
        animatable.AddAnimationCurve(keyPath, curve);
        float animFinishTime = 0;

        foreach (var k in curve.keys)
        {
            animFinishTime = Mathf.Max(animFinishTime, k.time);
        }

        StartCoroutine(C.WithDelay(() => { mutex ^= lockFlag; }, animFinishTime));
        if (propProbability.IsNonZero() && Random.value < propProbability)
        {
            var next = TileAtLocation(propLocation);
            if (next != null)
            {
                StartCoroutine(C.WithDelay(() => {
                    next.RunAnimation(keyPath, curve, propLocation, propProbability, propDelay);
                }, propDelay));
            }
        }
    }
Example #2
0
File: Agent.cs Project: kijun/art
    public Tile TileAtLocation(Location loc, TileMutexFlag mutexFlag = TileMutexFlag.None)
    {
        var targetTiles = adjacentFlags;

        if (mutexFlag != TileMutexFlag.None)
        {
            foreach (var kv in adjacent)
            {
                if (kv.Value.IsLocked(mutexFlag))
                {
                    targetTiles ^= kv.Key;
                }
            }
        }

        var chosenLocation = loc.ChooseRandom(targetTiles);

        if (chosenLocation == Location.None)
        {
            return(null);
        }
        return(adjacent[chosenLocation]);
    }
Example #3
0
File: Agent.cs Project: kijun/art
 public bool IsLocked(TileMutexFlag flag)
 {
     return((mutex & flag) != 0);
 }