示例#1
0
文件: Family.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		if (Map.CurrentMap.getObject(person.currentMapPos) is Building)
		{
			Building CurrentBuilding = (Building)Map.CurrentMap.getObject(person.currentMapPos);
			//check for another person 
			var other = CurrentBuilding.GetNonBusyPersonInBuilding();
			if (CurrentBuilding.teamID == person.teamID && other != null && other.teamID == person.teamID)
			{
				person.SetBusy(20);
				CurrentBuilding.GetNonBusyPersonInBuilding().SetBusy(20);
				if (CurrentBuilding.m_buildingtype == BuildingType.turfHut)
				{
					Map.CurrentMap.AddPerson(person.currentMapPos, person.teamID);
					return ActionResult.SUCCESS;
				}
				else if( CurrentBuilding.m_buildingtype == BuildingType.House)
				{
					Map.CurrentMap.AddPerson(person.currentMapPos, person.teamID);
					Map.CurrentMap.AddPerson(person.currentMapPos, person.teamID);
					return ActionResult.SUCCESS;
				}
			}
		}
		return ActionResult.FAIL;
	}
示例#2
0
文件: Store.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		if (Map.CurrentMap.getObject(person.currentMapPos) is Building)
		{
			Building CurrentBuilding = (Building)Map.CurrentMap.getObject(person.currentMapPos);
			
			if (CurrentBuilding.m_buildingtype == BuildingType.Storage
			    && CurrentBuilding.teamID == person.teamID)
			{
				person.SetBusy(1);
				foreach (var item in person.Resources)
				{
					//UnityEngine.Debug.Log(item.Key + ": " + item.Value);
					Map.CurrentMap.GetTeamData(person.teamID).Resources[item.Key] += item.Value;
				}
				person.ResetResources();
				return ActionResult.SUCCESS;
			}
		}
		Building nearestStorage = Map.CurrentMap.GetTeamData(person.teamID).GetNearestBuilding (person.currentMapPos, BuildingType.Storage);
		if (nearestStorage == null) {
			return ActionResult.FAIL;
		}
		person.ToDoList.Insert (0, new Move (person.currentMapPos, nearestStorage.m_MapPos));
		return ActionResult.CONTINUE;
	}
示例#3
0
文件: Mine.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		if (destination == null) {
			ResourceTile tile = Map.CurrentMap.GetNearestResourceTile (person.currentMapPos, type);
			Building nearestMine = Map.CurrentMap.GetNearestBuilding (person.currentMapPos, BuildingType.Mine);

			float distanceToTile = (tile.m_MapPos - person.currentMapPos).magnitude ();
			float distanceToBuilding = nearestMine != null ? (nearestMine.m_MapPos - person.currentMapPos).magnitude () : float.MaxValue;

			if (distanceToTile > distanceToBuilding) {
				destination = nearestMine.m_MapPos;
			} else {
				destination = tile.m_MapPos;
			}
		}

		if (person.currentMapPos == destination) {
			MapObject mo = Map.CurrentMap.getObject(destination);
			if (mo is Building) {
				Building b = mo as Building;
				if (b.m_buildingtype == BuildingType.Mine && person.Skills.Contains(Skill.Miner))
				{
					person.Resources[type] += 1;
					person.ToDoList[0] = new Store();
					return ActionResult.CONTINUE;
				} else {
					return ActionResult.FAIL;
				}
			}
			if (mo is ResourceTile) {
				ResourceTile rt = mo as ResourceTile;
				if (rt.m_resource == type) {
					person.Resources[rt.m_resource] += rt.GatherResource(type);
					person.SetBusy(5);
					person.ToDoList[0] = new Store();
					return ActionResult.CONTINUE;
				} else {
					return ActionResult.FAIL;
				}
			}
		}

		person.ToDoList.Insert (0, new Move (person.currentMapPos, destination));
		return ActionResult.CONTINUE;
	}
示例#4
0
文件: SawWood.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		var CurrentTeamData = Map.CurrentMap.GetTeamData (person.teamID);
		if (Map.CurrentMap.getObject(person.currentMapPos) is Building)
		{
			Building CurrentBuilding = (Building)Map.CurrentMap.getObject(person.currentMapPos);
			
			if (CurrentBuilding.m_buildingtype == BuildingType.Sawmill
			    && CurrentBuilding.teamID == person.teamID
			    && person.Skills.Contains(Skill.Labourer)
			    && CurrentTeamData.Resources[ResourceType.Timber] > 0)
			{
				person.SetBusy(10);
				CurrentTeamData.Resources[ResourceType.Timber]--;
				person.Resources[ResourceType.Wood]++;
			}
		}
		return ActionResult.FAIL;
	}
示例#5
0
文件: CutTree.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		if (!person.Skills.Contains (Skill.Lumberjack)) {
			return ActionResult.FAIL;
		}
		if (Map.CurrentMap.getObject(person.currentMapPos) is ResourceTile)
		{
			ResourceTile tile = (ResourceTile)Map.CurrentMap.getObject(person.currentMapPos);
			if(tile.m_resource == ResourceType.Timber
			   && person.Skills.Contains(Skill.Lumberjack))
			{
				person.Resources[ResourceType.Timber] += tile.GatherResource(ResourceType.Timber);
				person.SetBusy(5);
				person.ToDoList[0] = new Store();
				return ActionResult.CONTINUE; //Don't want to remove it.
			}
		}
		ResourceTile nearestResource = Map.CurrentMap.GetNearestResourceTile (person.currentMapPos, ResourceType.Timber);
		person.ToDoList.Insert (0, new Move (person.currentMapPos, nearestResource.m_MapPos));
		return ActionResult.CONTINUE;
	}
示例#6
0
文件: Combat.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
		if (person.Skills.Contains(Skill.Rifleman))
		{
			List<Person> others = new List<Person>();
			for(IVec2 offset = new IVec2(-5,-5); offset.x < 6;++offset.x)
			{
				for(offset.y = -5; offset.y < 6;++offset.y)
				{
					if(offset.magnitude() <= 5)
					{
						others.AddRange(Map.CurrentMap.GetPeopleAt(person.currentMapPos + offset));
					}
				}
			}
			Person other = null;
			foreach (var item in others)
			{
				if(item.teamID != person.teamID)
				{
					other = item;
					break;
				}
			}
			if(other)
			{
				if(other.Skills.Contains(Skill.Rifleman) && UnityEngine.Random.Range(0,100) < (100.0f/3f * 2f))
				{
					Map.CurrentMap.KillPerson(person);
				}
				else
				{
					Map.CurrentMap.KillPerson(other);
					person.SetBusy(1);
				}
			}
		}
		return ActionResult.FAIL;
	}
示例#7
0
文件: Educate.cs 项目: Wolfie13/RTSAI
	public override ActionResult actionTick (Person person)
	{
        if (target == null)
        {
            foreach (Person p in Map.CurrentMap.GetTeamData(person.teamID).GetPeople())
            {
                if (p == person) continue;
                target = p;
            }
        }

		if (!taskDispatched) {
			mutualLearningZone = (person.currentMapPos + target.currentMapPos) / 2;
            
            var nearestSchool = Map.CurrentMap.GetTeamData(person.teamID).GetNearestBuilding(mutualLearningZone, BuildingType.School);
            if (nearestSchool == null)
            {
                inSchool = StayInSchool.no;
            }
            if (inSchool == StayInSchool.yes)
            {
                mutualLearningZone = nearestSchool.m_MapPos;
           	}
            if (inSchool == StayInSchool.whocares)
            {
                if ((mutualLearningZone - person.currentMapPos).magnitude() > (nearestSchool.m_MapPos - person.currentMapPos).magnitude())
                {
                    mutualLearningZone = nearestSchool.m_MapPos;
                    inSchool = StayInSchool.yes;
                }
                else
                {
                    inSchool = StayInSchool.no;
                }

            }

			target.ToDoList.Insert (0, new Learn (mutualLearningZone));
			taskDispatched = true;
		}

		if (skill == Skill.Rifleman) {

			if (Map.CurrentMap.getObject (person.currentMapPos) is Building) {
				Building CurrentBuilding = (Building)Map.CurrentMap.getObject (person.currentMapPos);
				
				var other = CurrentBuilding.GetNonBusyPersonInBuilding ();
				
				if (person.Skills.Contains (Skill.Rifleman)
					&& CurrentBuilding.m_buildingtype == BuildingType.Barracks
					&& CurrentBuilding.teamID == person.teamID
					&& other != null
					&& other.teamID == person.teamID) {
					person.SetBusy (RIFLE_TRAIN_TIME);
					other.SetBusy (RIFLE_TRAIN_TIME);
					other.Skills.Add (Skill.Rifleman);
					return ActionResult.SUCCESS;
				}
			}
		}

		if (inSchool == StayInSchool.yes) {
			if (Map.CurrentMap.getObject(person.currentMapPos) is Building)
			{
				Building CurrentBuilding = (Building)Map.CurrentMap.getObject(person.currentMapPos);
				
				if (CurrentBuilding.m_buildingtype == BuildingType.School
				    && CurrentBuilding.teamID == person.teamID)
				{
					var other = CurrentBuilding.GetNonBusyPersonInBuilding();
					while (other != null && other.teamID == person.teamID)
					{
						foreach (var item in person.Skills)
						{
							if (!other.Skills.Contains(item))
							{
								other.SetBusy(50);
								person.SetBusy(50);
								other.Skills.Add(item);
								return ActionResult.SUCCESS;
							}
						}
						other = CurrentBuilding.GetNonBusyPersonInBuilding();
					}
				}
				
			}
		} else {
			if (target == null || target.teamID != person.teamID)
				return ActionResult.FAIL;

			if (target.currentMapPos == person.currentMapPos) {
				if(!target.Skills.Contains(skill))
				{
					target.SetBusy(TRAIN_TIME);
					person.SetBusy(TRAIN_TIME);
					target.transform.Translate(1.5f, 0, 0);
					person.transform.Translate(-1.5f, 0, 0);
					target.Skills.Add(skill);
					return ActionResult.SUCCESS;
				}
			}
		}

		person.ToDoList.Insert (0, new Move (person.currentMapPos, mutualLearningZone));
		return ActionResult.CONTINUE;
	}