using System.Collections.Generic;
using CommonLang;
using XmdsCommonServer.Plugin;
using CommonAI.Zone.Instance;
using XmdsCommonServer.Plugin.Scene;
using System;
using CommonAI.Zone.Helper;
namespace XmdsCommonSkill.Plugin.FunctionEvent
{
///
/// 玩家触发aoi
///
public class XmdsBattleFunctionEventAOI_99993 : XmdsBattleFunctionEventBase
{
public static int EventID = 99993;
public class ParamsData
{
public struct UnitCreateInfo
{
public int id;
public int force;
public bool relativePos;
public float x;
public float y;
}
public bool bindTeam;
public bool canSeeMe;
public bool canSeeOther;
public bool deadExit;
//退出aoi需要消灭的阵营
public int killForce;
public List units;
}
//private ParamsData mParams;
// 队伍拉人半径
public static int TeamRadius = 5;
public override int GetEventID()
{
return EventID;
}
protected override bool OnInit()
{
return true;
}
public override object CreateParams()
{
return new ParamsData();
}
private T ObjectDict2ValueByKey(IDictionary dict, string key, T defaultVal)
{
if (dict == null)
{
return defaultVal;
}
object ret;
if (dict.TryGetValue(key, out ret))
{
return (T)System.Convert.ChangeType(ret, typeof(T));
}
else
{
return defaultVal;
}
}
protected override void OnTriggerEvent(XmdsVirtual target, XmdsVirtual sender)
{
//InstancePlayer player = target.mUnit as InstancePlayer;
//if(player == null)
//{
// return;
//}
//mParams = (ParamsData)data;
//XmdsPlayerAOI aoi = new XmdsPlayerAOI(player, mParams.canSeeMe, mParams.canSeeOther);
//player.setAoiStatus(aoi);
//int killForce = mParams.killForce;
//aoi.DeadExit = mParams.deadExit;
//var handle = new ObjectAoiStatus.OnObjectLeaveHandler((a, o)=>
//{
// if (aoi.GetUnitCountByForce(killForce) == 0)
// {
// aoi.Cleanup();
// player.setAoiStatus(null);
// }
//});
//aoi.OnObjectLeave += handle;
//var zone = player.Parent;
//// 以TeamRadius为半径将队友拉入位面
//if (mParams.bindTeam && target.TeamListCount > 0)
//{
// var teamList = target.TeamList;
// foreach (var uuid in teamList)
// {
// var p = zone.getPlayerByUUID(uuid);
// if (p != null && CMath.intersectRound(player.X, player.Y, TeamRadius, p.X, p.Y, p.Info.BodySize))
// {
// p.setAoiStatus(aoi);
// }
// }
//}
//if(mParams.units != null)
//{
// foreach (var item in mParams.units)
// {
// var unitInfo = zone.Templates.getUnit(item.id);
// if(unitInfo != null)
// {
// float x = item.x, y = item.y;
// if (item.relativePos)
// {
// x = player.X + item.x;
// y = player.Y + item.y;
// }
// float d = (float)(Math.Atan2(player.Y - y, player.X - x));
// var unit = zone.AddUnit(unitInfo, "打华仔", (byte)item.force, player.Level, x, y, d);
// if (unit != null)
// {
// unit.setAoiStatus(player.AoiStatus);
// }
// }
// }
//}
}
}
}