示例#1
0
    public ElveState_Climb(ElveBehavior owner, float dir)
        : base(owner)
    {
        Assert.IsTrue(dir == 1.0f || dir == -1.0f, "Dir must be +/- 1, but it is " + dir);

        Dir = dir;
    }
示例#2
0
    public ElveState_CrossLedge(ElveBehavior owner, Vector2i moveAmount)
        : base(owner)
    {
        MoveAmount = moveAmount;

        Assert.IsTrue(moveAmount.x == 1 || moveAmount.x == -1);
        Assert.IsTrue(moveAmount.y == 1 || moveAmount.y == -1);
    }
示例#3
0
 public override bool CanElveDoJob(ElveBehavior elve)
 {
     PathFinder<VoxelNode> pather =
         new PathFinder<VoxelNode>(VoxelGraph.Instance,
                                   (n1, n2) =>
                                       new VoxelEdge(n1, n2, PathingConstants.MovementTypes.Walk));
     pather.Start = new VoxelNode((Vector2)elve.MyTransform.position);
     pather.End = new VoxelNode(PlantPos);
     return pather.FindPath();
 }
示例#4
0
    public override IEnumerator RunJobCoroutine(ElveBehavior elve)
    {
        yield return null;

        elveMovement = elve.GetComponent<ElveMovementController>();

        //Move to the target.
        if (!elveMovement.StartPath(PlantPos))
        {
            StopJob(true, "Path is blocked");
            yield break;
        }
        while (!elveMovement.IsPathCompleted)
            yield return null;

        //Plant the seed.
        Assert.IsNull(elve.CurrentState);
        elve.CurrentState = new ElveState_UseMagic(elve, JobConstants.Instance.TimeToPlantSeed,
                                                   ElveBehavior.Surfaces.Floor);
        while (elve.CurrentState != null)
            yield return null;

        //Stop the job before creating the seed.
        //Otherwise, the changing of that voxel will cause this job to cancel itself.
        StopJob(false);

        WorldVoxels.Instance.SetVoxelAt(PlantPos, SeedType);
        SeedManager.Instance.Seeds.Add(new SeedManager.SeedData(PlantPos, GrowPattern));
    }
示例#5
0
 public ElveState_MoveToEdge(ElveBehavior owner, ElveState toResume, float dir)
     : base(owner)
 {
     Dir = dir;
     ToResume = toResume;
 }
示例#6
0
 /// <summary>
 /// An empty callback. Used above when triggering the "OnStateChanged" event.
 /// </summary>
 private static void DummyFunc(ElveBehavior m, ElveState s1, ElveState s2)
 {
 }
示例#7
0
 public ElveState_UseMagic(ElveBehavior owner, float duration, ElveBehavior.Surfaces target)
     : base(owner)
 {
     TimeLeft = duration;
     Target = target;
 }
示例#8
0
文件: Job.cs 项目: heyx3/Elve
 /// <summary>
 /// A coroutine that makes the given Elve do this job.
 /// NOTE: Make sure at least one update cycle has passed before calling "StopJob()".
 /// </summary>
 public abstract IEnumerator RunJobCoroutine(ElveBehavior elve);
示例#9
0
文件: Job.cs 项目: heyx3/Elve
 /// <summary>
 /// Calculates whether the given Elve can do this job, ignoring labor requirements.
 /// </summary>
 public abstract bool CanElveDoJob(ElveBehavior elve);
示例#10
0
 void Awake()
 {
     tr = transform;
     fsm = GetComponent<ElveBehavior>();
 }
示例#11
0
文件: ElveState.cs 项目: heyx3/Elve
 public ElveState(ElveBehavior owner)
 {
     Owner = owner;
 }