private bool ShouldCalculatePath(DroidNode node) { TransformComponent transformComponent = node.Droid.Target.Get <TransformComponent>(); if (transformComponent == null) { return(false); } PathingComponent pathingComponent = node.Entity.Get <PathingComponent>(); if (pathingComponent == null) { return(false); } Path currentPath = pathingComponent.CurrentPath; if (currentPath == null) { return(false); } if (currentPath.TurnCount == 0) { return(false); } BoardCell turn = currentPath.GetTurn(currentPath.TurnCount - 1); int num = turn.X - transformComponent.X; int num2 = turn.Z - transformComponent.Z; return(num < -1 || num > transformComponent.BoardWidth || num2 < -1 || num2 > transformComponent.BoardDepth); }
public void ShowAllDroids() { NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>(); for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next) { droidNode.Entity.Get <GameObjectViewComponent>().MainGameObject.SetActive(true); this.AssignDroidPath(droidNode); } }
private void DestroyAllDroids() { List <DroidNode> list = new List <DroidNode>(); NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>(); for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next) { list.Add(droidNode); } for (int i = list.Count - 1; i >= 0; i--) { this.DestroyDroid(list[i]); } }
private Entity FindIdleDroid(CivilianTypeVO droidType) { Entity droidHut = this.GetDroidHut(); NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>(); for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next) { if (droidNode.Droid.Target == droidHut || droidNode.Droid.Target == null) { return(droidNode.Entity); } } return(this.CreateDroid(droidType)); }
private void RemoveWorkFromDroid(Entity building, bool hasScaffolding) { NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>(); for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next) { if (droidNode.Droid.Target == building) { droidNode.Droid.AnimateTravel = true; droidNode.Droid.Target = this.GetDroidHut(); droidNode.State.CurState = EntityState.Moving; this.AssignDroidPath(droidNode); break; } } }
protected override void Update(float dt) { Entity droidHut = this.droidController.GetDroidHut(); DroidNode next; for (DroidNode droidNode = this.nodeList.Head; droidNode != null; droidNode = next) { next = droidNode.Next; if (droidNode.State.Dirty && droidNode.State.CurState == EntityState.Moving) { this.droidController.AssignDroidPath(droidNode); } if (droidNode.State.CurState == EntityState.Idle) { if (droidNode.Droid.Target != null) { droidNode.State.CurState = EntityState.Moving; this.droidController.AssignDroidPath(droidNode); } } else if (droidNode.State.CurState == EntityState.Moving) { if (this.droidController.UpdateDroidTransform(droidNode, dt)) { if (droidNode.Droid.Target == droidHut) { droidNode.State.CurState = EntityState.CoolingDown; this.droidController.DestroyDroid(droidNode); } else { droidNode.State.CurState = EntityState.Attacking; droidNode.Droid.Delay = (float)Service.Rand.ViewRangeInt(1, 4) * 3.033f; } } } else if (droidNode.State.CurState == EntityState.CoolingDown || droidNode.State.CurState == EntityState.Attacking) { droidNode.Droid.Delay -= dt; if (droidNode.Droid.Delay <= 0f) { droidNode.State.CurState = EntityState.Moving; this.droidController.AssignDroidPath(droidNode); } } } }
public void HideAllNonClearableDroids() { List <DroidNode> list = new List <DroidNode>(); NodeList <DroidNode> nodeList = Service.EntityController.GetNodeList <DroidNode>(); for (DroidNode droidNode = nodeList.Head; droidNode != null; droidNode = droidNode.Next) { BuildingType type = droidNode.Droid.Target.Get <BuildingComponent>().BuildingType.Type; if (type != BuildingType.Clearable) { list.Add(droidNode); } } for (int i = list.Count - 1; i >= 0; i--) { list[i].Entity.Get <GameObjectViewComponent>().MainGameObject.SetActive(false); } }
public bool UpdateDroidTransform(DroidNode droid, float dt) { if (droid != null && droid.IsValid() && droid.Entity != null) { PathingComponent pathingComponent = droid.Entity.Get <PathingComponent>(); if (pathingComponent != null) { if ((ulong)pathingComponent.TimeOnSegment > (ulong)((long)pathingComponent.TimeToMove) && this.ShouldCalculatePath(droid)) { droid.State.CurState = EntityState.Moving; this.AssignDroidPath(droid); return(false); } return(pathingComponent.CurrentPath == null); } } return(false); }
public void AssignDroidPath(DroidNode droid) { if (droid != null && droid.IsValid()) { int x = droid.Transform.X; int z = droid.Transform.Z; BoardController boardController = Service.BoardController; BoardCell startCell = boardController.Board.GetCellAt(x, z); SmartEntity smartEntity = (SmartEntity)droid.Droid.Target; TransformComponent transformComp = smartEntity.TransformComp; if (transformComp == null) { return; } int num = transformComp.X - 1; int num2 = transformComp.Z - 1; int num3 = Service.Rand.ViewRangeInt(0, transformComp.BoardWidth + transformComp.BoardDepth + 1); if (num3 <= transformComp.BoardWidth) { num += num3; } else { num2 += num3 - transformComp.BoardWidth; } BoardCell cellAt = boardController.Board.GetCellAt(num, num2); if (!droid.Droid.AnimateTravel) { startCell = cellAt; } if (cellAt != null) { Service.PathingManager.StartPathingWorkerOrPatrol((SmartEntity)droid.Entity, smartEntity, startCell, cellAt, droid.Size.Width, true); } droid.Droid.AnimateTravel = true; } }
public void DestroyDroid(DroidNode droid) { Service.EntityFactory.DestroyEntity(droid.Entity, true, false); }