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.
80 lines
2.9 KiB
80 lines
2.9 KiB
using System.Collections.Generic; |
|
using System.Linq; |
|
using UnityEngine; |
|
|
|
namespace ET |
|
{ |
|
[FriendClass(typeof (ResourcePoint))] |
|
public static class ResourcePointSystem |
|
{ |
|
public static void FromMessage(this ResourcePoint self, ResourceProto resourceProto) |
|
{ |
|
self.Id = resourceProto.Id; |
|
self.ConfigId = resourceProto.ConfigId; |
|
self.Position = new Vector2(resourceProto.X, resourceProto.Y); |
|
self.MatureState = resourceProto.MatureState; |
|
self.MonsterGroupId = resourceProto.MonsterGroupId; |
|
self.ResAttriDic = new Dictionary<int, ResourceAttri>(); |
|
foreach (var attri in resourceProto.resAttriList) |
|
{ |
|
var resAttri = new ResourceAttri { ConfigId = attri.ConfigId, GatherAmount = attri.CurrAmount, MaxAmount = attri.MaxAmount }; |
|
self.ResAttriDic[resAttri.ConfigId] = resAttri; |
|
} |
|
} |
|
|
|
public static ResourceProto ToMessage(this ResourcePoint self) |
|
{ |
|
var proto = new ResourceProto(); |
|
proto.Id = self.Id; |
|
proto.ConfigId = self.ConfigId; |
|
proto.X = self.Position.x; |
|
proto.Y = self.Position.y; |
|
proto.MatureState = self.MatureState; |
|
proto.MonsterGroupId = self.MonsterGroupId; |
|
foreach (var attri in self.ResAttriDic.Values) |
|
{ |
|
var attriProto = new ResAttriProto { ConfigId = attri.ConfigId, CurrAmount = attri.GatherAmount, MaxAmount = attri.MaxAmount }; |
|
proto.resAttriList.Add(attriProto); |
|
} |
|
|
|
return proto; |
|
} |
|
|
|
public static (bool, int) Product(this ResourcePoint self, int resConfigId, int amount) |
|
{ |
|
var resAttri = self.ResAttriDic[resConfigId]; |
|
resAttri.GatherAmount += amount; |
|
var result = false; |
|
if (resAttri.GatherAmount >= resAttri.MaxAmount) |
|
{ |
|
amount -= resAttri.GatherAmount - resAttri.MaxAmount; |
|
resAttri.GatherAmount = resAttri.MaxAmount; |
|
result = true; |
|
} |
|
|
|
self.ResAttriDic[resConfigId] = resAttri; |
|
return (result, amount); |
|
} |
|
|
|
public static bool HaveResource(this ResourcePoint self, int resConfigId) |
|
{ |
|
if (self.ResAttriDic.Keys.Contains(resConfigId)) |
|
{ |
|
return self.ResAttriDic[resConfigId].MaxAmount > self.ResAttriDic[resConfigId].GatherAmount; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
public static void UpdateResAttri(this ResourcePoint self,int configId, int amount) |
|
{ |
|
if (self.ResAttriDic.Keys.Contains(configId)) |
|
{ |
|
var resAttri = self.ResAttriDic[configId]; |
|
resAttri.GatherAmount = amount; |
|
self.ResAttriDic[configId] = resAttri; |
|
|
|
} |
|
} |
|
} |
|
} |