You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
6.4 KiB
176 lines
6.4 KiB
3 years ago
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace ET
|
||
|
{
|
||
|
[FriendClass(typeof(Gather))]
|
||
|
[FriendClass(typeof(ResourcePoint))]
|
||
|
public static class GatherOperate
|
||
|
{
|
||
|
public static (int,long) GatherResource(Unit unit, long resPointId, int resConfigId,List<long> peopleIdList,long gatherId)
|
||
|
{
|
||
|
ResourcePoint resource = unit.GetComponent<ResourcePointComponent>().GetChild<ResourcePoint>(resPointId);
|
||
|
if (resource == null)
|
||
|
{
|
||
|
return (ErrorCode.ERR_ResourceNotFound,0);
|
||
|
}
|
||
|
|
||
|
List<People> peopleList = new List<People>();
|
||
|
foreach (var id in peopleIdList)
|
||
|
{
|
||
|
People people = unit.GetComponent<PeopleComponent>().GetChild<People>(id);
|
||
|
if (people == null)
|
||
|
{
|
||
|
return (ErrorCode.ERR_PeopleNotFound,0);
|
||
|
}
|
||
|
|
||
|
if (resource.Config.Type==1 && people.GetPeopleType() > 1)
|
||
|
{
|
||
|
return (ErrorCode.ERR_PeopleTypeError, 0);
|
||
|
}
|
||
|
|
||
|
peopleList.Add(people);
|
||
|
}
|
||
|
|
||
|
if (!resource.HaveResource(resConfigId))
|
||
|
{
|
||
|
return (ErrorCode.ERR_ResourceOver,0);
|
||
|
}
|
||
|
|
||
|
Gather gather = unit.GetOrAddComponent<GatherComponent>().AddChildWithNotZeroId<Gather>(gatherId);
|
||
|
gather.PreparePeopleIdList = peopleIdList;
|
||
|
gather.ResPointId = resPointId;
|
||
|
gather.ResConfigId = resConfigId;
|
||
|
foreach (var people in peopleList)
|
||
|
{
|
||
|
PeopleOperate.StopBehave(unit, people);
|
||
|
people.SetBehaveType(ConstBehaveType.BEHAVE_PREPARE_GATHER);
|
||
|
people.SetTargetId(gather.Id);
|
||
|
}
|
||
|
return (ErrorCode.ERR_Success, gather.Id);
|
||
|
}
|
||
|
|
||
|
public static int StartGather(Unit unit, long gatherId, long peopleId)
|
||
|
{
|
||
|
People people = unit.GetComponent<PeopleComponent>().GetChild<People>(peopleId);
|
||
|
if (people == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_PeopleNotFound;
|
||
|
}
|
||
|
|
||
|
Gather gather = unit.GetComponent<GatherComponent>().GetChild<Gather>(gatherId);
|
||
|
if (gather == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_GatherNotFound;
|
||
|
}
|
||
|
|
||
|
var behaveType = people.GetBehaveType();
|
||
|
if ( behaveType == ConstBehaveType.BEHAVE_PREPARE_GATHER && gather.PreparePeopleIdList.Remove(peopleId) )
|
||
|
{
|
||
|
gather.PeopleIdList.Add(peopleId);
|
||
|
people.SetBehaveType(ConstBehaveType.BEHAVE_GATHER);
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
return ErrorCode.ERR_OperateFail;
|
||
|
}
|
||
|
|
||
|
public static int StopGather(Unit unit, long gatherId, long peopleId)
|
||
|
{
|
||
|
People people = unit.GetComponent<PeopleComponent>().GetChild<People>(peopleId);
|
||
|
if (people == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_PeopleNotFound;
|
||
|
}
|
||
|
|
||
|
Gather gather = unit.GetComponent<GatherComponent>().GetChild<Gather>(gatherId);
|
||
|
if (gather == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_GatherNotFound;
|
||
|
}
|
||
|
|
||
|
var behaveType = people.GetBehaveType();
|
||
|
if ( (behaveType == ConstBehaveType.BEHAVE_PREPARE_GATHER && gather.PreparePeopleIdList.Remove(peopleId) )
|
||
|
||(behaveType == ConstBehaveType.BEHAVE_GATHER && gather.PeopleIdList.Remove(peopleId)) )
|
||
|
{
|
||
|
if (gather.IsOver())
|
||
|
{
|
||
|
|
||
|
gather.Dispose();
|
||
|
|
||
|
}
|
||
|
people.SetBehaveType(ConstBehaveType.BEHAVE_IDLE);
|
||
|
people.SetTargetId(0);
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
return ErrorCode.ERR_OperateFail;
|
||
|
}
|
||
|
|
||
|
public static int CancelGather(Unit unit, long gatherId)
|
||
|
{
|
||
|
Gather gather = unit.GetComponent<GatherComponent>().GetChild<Gather>(gatherId);
|
||
|
if (gather == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_GatherNotFound;
|
||
|
}
|
||
|
|
||
|
List<long> idList = gather.PeopleIdList.Union(gather.PreparePeopleIdList).ToList <long>();
|
||
|
foreach (var id in idList)
|
||
|
{
|
||
|
People people = unit.GetComponent<PeopleComponent>().GetChild<People>(id);
|
||
|
people.SetBehaveType(ConstBehaveType.BEHAVE_IDLE);
|
||
|
people.SetTargetId(0);
|
||
|
}
|
||
|
gather.Dispose();
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
|
||
|
public static int FinishGather(Unit unit, long gatherId)
|
||
|
{
|
||
|
Gather gather = unit.GetComponent<GatherComponent>().GetChild<Gather>(gatherId);
|
||
|
if (gather == null)
|
||
|
{
|
||
|
return ErrorCode.ERR_GatherNotFound;
|
||
|
}
|
||
|
|
||
|
List<long> idList = gather.PeopleIdList.Union(gather.PreparePeopleIdList).ToList <long>();
|
||
|
foreach (var id in idList)
|
||
|
{
|
||
|
People people = unit.GetComponent<PeopleComponent>().GetChild<People>(id);
|
||
|
people.SetBehaveType(ConstBehaveType.BEHAVE_IDLE);
|
||
|
people.SetTargetId(0);
|
||
|
}
|
||
|
|
||
|
var res = unit.GetComponent<ResourcePointComponent>().GetChild<ResourcePoint>(gather.ResPointId);
|
||
|
var config = ResourcesConfigCategory.Instance.Get(gather.ResConfigId);
|
||
|
if (config.Eradicate == 1)
|
||
|
{
|
||
|
res.Dispose();
|
||
|
//采集完给种子
|
||
|
if (res.Config.SaplingItemId > 0)
|
||
|
{
|
||
|
unit.GetComponent<StoreComponent>().Add(res.Config.SaplingItemId,1);
|
||
|
}
|
||
|
}
|
||
|
gather.Dispose();
|
||
|
return ErrorCode.ERR_Success;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static int GetPeopleProduceAmount(Unit unit, List<long> peopleIdList, int baseEfficient)
|
||
|
{
|
||
|
int rate = WorldParametersConfigCategory.Instance.Get(WorldParam.LaborCoefficientGather).Value[0];
|
||
|
int labor = 0;
|
||
|
foreach (var peopleId in peopleIdList)
|
||
|
{
|
||
|
var people = unit.GetComponent<PeopleComponent>().GetChild<People>(peopleId);
|
||
|
labor += people.GetLabor();
|
||
|
}
|
||
|
|
||
|
//每次的产量
|
||
|
int amount = baseEfficient * (1 + labor / rate);
|
||
|
return amount;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|