本文整理汇总了C#中GameFramework.EntityInfo.GetMovementStateInfo方法的典型用法代码示例。如果您正苦于以下问题:C# EntityInfo.GetMovementStateInfo方法的具体用法?C# EntityInfo.GetMovementStateInfo怎么用?C# EntityInfo.GetMovementStateInfo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameFramework.EntityInfo
的用法示例。
在下文中一共展示了EntityInfo.GetMovementStateInfo方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildCreateNpcMessage
internal static Msg_RC_CreateNpc BuildCreateNpcMessage(EntityInfo npc, int rate = -1)
{
Msg_RC_CreateNpc bder = new Msg_RC_CreateNpc();
bder.npc_id = npc.GetId();
bder.unit_id = npc.GetUnitId();
ScriptRuntime.Vector3 pos = npc.GetMovementStateInfo().GetPosition3D();
GameFrameworkMessage.Position pos_bd = new GameFrameworkMessage.Position();
pos_bd.x = (float)pos.X;
pos_bd.z = (float)pos.Z;
bder.cur_pos = pos_bd;
bder.face_direction = (float)npc.GetMovementStateInfo().GetFaceDir();
bder.link_id = npc.GetLinkId();
bder.camp_id = npc.GetCampId();
if (npc.OwnerId > 0) {
bder.owner_id = npc.OwnerId;
}
if (npc.GetAiStateInfo().LeaderID > 0) {
bder.leader_id = npc.GetAiStateInfo().LeaderID;
}
User user = npc.CustomData as User;
if (null != user) {
bder.key = user.GetKey();
}
bder.level = npc.GetLevel();
return bder;
}
示例2: BuildNpcFaceMessage
internal static Msg_RC_NpcFace BuildNpcFaceMessage(EntityInfo npc)
{
Msg_RC_NpcFace npcFaceBuilder = new Msg_RC_NpcFace();
npcFaceBuilder.npc_id = npc.GetId();
npcFaceBuilder.face_direction = ProtoHelper.EncodeFloat(npc.GetMovementStateInfo().GetFaceDir());
return npcFaceBuilder;
}
示例3: BuildNpcMoveMessage
internal static Msg_RC_NpcMove BuildNpcMoveMessage(EntityInfo npc)
{
ScriptRuntime.Vector3 srcPos = npc.GetMovementStateInfo().GetPosition3D();
Msg_RC_NpcMove npcMoveBuilder = new Msg_RC_NpcMove();
if (npc.GetMovementStateInfo().IsMoving) {
npcMoveBuilder.npc_id = npc.GetId();
npcMoveBuilder.velocity = ProtoHelper.EncodeFloat(npc.GetActualProperty().MoveSpeed);
ScriptRuntime.Vector3 targetPos = npc.GetMovementStateInfo().TargetPosition;
npcMoveBuilder.target_pos = ProtoHelper.EncodePosition2D(targetPos.X, targetPos.Z);
npcMoveBuilder.cur_pos = ProtoHelper.EncodePosition2D(srcPos.X, srcPos.Z);
} else {
npcMoveBuilder.npc_id = npc.GetId();
npcMoveBuilder.cur_pos = ProtoHelper.EncodePosition2D(srcPos.X, srcPos.Z);
}
return npcMoveBuilder;
}
示例4: OnStateLogicInit
protected override void OnStateLogicInit(EntityInfo entity, long deltaTime)
{
AiStateInfo info = entity.GetAiStateInfo();
info.Time = 0;
info.HomePos = entity.GetMovementStateInfo().GetPosition3D();
info.Target = 0;
}
示例5: OnAiFace
private void OnAiFace(EntityInfo entity)
{
if (null != entity && entity.EntityType != (int)EntityTypeEnum.Tower) {
float dir = entity.GetMovementStateInfo().GetFaceDir();
GameObject actor = EntityController.Instance.GetGameObject(entity.GetId());
actor.transform.localRotation = Quaternion.Euler(0, Utility.RadianToDegree(dir), 0);
}
}
示例6: OnAiFace
private void OnAiFace(EntityInfo npc)
{
if (npc.GetMovementStateInfo().IsFaceDirChanged) {
npc.GetMovementStateInfo().IsFaceDirChanged = false;
if (null != npc) {
float dir = npc.GetMovementStateInfo().GetFaceDir();
npc.GetMovementStateInfo().SetFaceDir(dir);
}
if (!npc.GetMovementStateInfo().IsMoving) {
Scene scene = npc.SceneContext.CustomData as Scene;
if (null != scene) {
Msg_RC_NpcFace npcFaceBuilder = DataSyncUtility.BuildNpcFaceMessage(npc);
if (null != npcFaceBuilder)
scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcFace, npcFaceBuilder);
}
}
}
}
示例7: CombatHandler
private void CombatHandler(EntityInfo npc, long deltaTime)
{
if (npc.GetSkillStateInfo().IsSkillActivated()) {
return;
}
AiStateInfo info = npc.GetAiStateInfo();
Vector3 targetPos = info.HomePos;
ScriptRuntime.Vector3 srcPos = npc.GetMovementStateInfo().GetPosition3D();
float distSqrToHome = Geometry.DistanceSquare(srcPos, info.HomePos);
if (distSqrToHome > npc.GohomeRange * npc.GohomeRange) {
NotifyAiStopPursue(npc);
ChangeToState(npc, (int)AiStateId.GoHome);
return;
}
///
EntityInfo attackTarget = null;
SkillStateInfo currSkInfo = npc.GetSkillStateInfo();
///找到可以使用的技能
SkillInfo skInfo = AiLogicUtility.NpcFindCanUseSkill(npc, this.GetAiData(npc), true);
NotifyAiSelectSkill(npc, skInfo);
if (skInfo == null) {
//没有可以使用的技能就切换到Idle状态
ChangeToState(npc, (int)AiStateId.Idle);
return;
}
CharacterRelation relation =
(skInfo.TargetType == SkillTargetType.Friend ||
skInfo.TargetType == SkillTargetType.RandFriend) ?
CharacterRelation.RELATION_FRIEND :
CharacterRelation.RELATION_ENEMY;
attackTarget = AiLogicUtility.GetNearstTargetHelper(
npc, skInfo.Distance, relation);
if (attackTarget != null && null != skInfo) //攻击范围内找到可攻击目标
{
info.Target = attackTarget.GetId();
NotifyAiStopPursue(npc);
NotifyAiSkill(npc, skInfo.SkillId); //攻击目标
return;
}
attackTarget = AiLogicUtility.GetNearstTargetHelper(
npc, npc.ViewRange, relation);
if (attackTarget != null) //视野范围内找到可攻击目标
{
NotifyAiPursue(npc, attackTarget.GetMovementStateInfo().GetPosition3D()); // 追赶目标
return;
}
currSkInfo.SetCurSkillInfo(0);
NotifyAiStopPursue(npc);
ChangeToState(npc, (int)AiStateId.GoHome);
}
示例8: CombatHandler
private void CombatHandler(EntityInfo npc, long deltaTime)
{
AiStateInfo aiInfo = npc.GetAiStateInfo();
AiData_Leader aiData = GetAiData(npc);
if (npc.GetSkillStateInfo().IsSkillActivated()) {
return;
}
///
SkillStateInfo currSkInfo = npc.GetSkillStateInfo();
///找到可以使用的技能
SkillInfo skInfo = AiLogicUtility.NpcFindCanUseSkill(npc, this.GetAiData(npc), aiData.IsAutoOperate);
NotifyAiSelectSkill(npc, skInfo);
if (skInfo == null) {
//没有可以使用的技能就切换到Idle状态
ChangeToState(npc, (int)AiStateId.Idle);
return;
}
CharacterRelation relation =
(skInfo.TargetType == SkillTargetType.Friend ||
skInfo.TargetType == SkillTargetType.RandFriend) ?
CharacterRelation.RELATION_FRIEND :
CharacterRelation.RELATION_ENEMY;
EntityInfo attackTarget = AiLogicUtility.GetNearstAttackerHelper(npc, relation, aiData);
if (null != attackTarget) {
NotifyAiTarget(npc, attackTarget);
if (Geometry.DistanceSquare(npc.GetMovementStateInfo().GetPosition3D(), attackTarget.GetMovementStateInfo().GetPosition3D()) < skInfo.Distance * skInfo.Distance) {
aiInfo.Target = attackTarget.GetId();
NotifyAiStopPursue(npc);
NotifyAiSkill(npc, skInfo.SkillId);
return;
}
}
attackTarget = AiLogicUtility.GetNearstTargetHelper(npc, skInfo.Distance, relation);
if (attackTarget != null && null != skInfo) { //攻击范围内找到可攻击目标
NotifyAiTarget(npc, attackTarget);
aiInfo.Target = attackTarget.GetId();
NotifyAiStopPursue(npc);
NotifyAiSkill(npc, skInfo.SkillId); //攻击目标
return;
}
if (aiData.IsAutoOperate) {
attackTarget = AiLogicUtility.GetNearstTargetHelper(npc, npc.ViewRange, relation);
if (attackTarget != null && null != skInfo) { //视野内找到可攻击目标
NotifyAiPursue(npc, attackTarget.GetMovementStateInfo().GetPosition3D());
return;
}
}
///退出战斗模式清理一下手动技能
currSkInfo.SetCurSkillInfo(0);
aiData.ManualSkillId = 0;
NotifyAiStopPursue(npc);
ChangeToState(npc, (int)AiStateId.Idle);
}
示例9: GetNearstAttackerHelper
public static EntityInfo GetNearstAttackerHelper(EntityInfo srcObj, CharacterRelation relation, AiData_General aidata)
{
EntityInfo ret = null;
float minDistSqr = 999999;
Vector2 dir = srcObj.GetMovementStateInfo().GetFaceDir2D();
Vector2 pos = srcObj.GetMovementStateInfo().GetPosition2D();
if (relation == CharacterRelation.RELATION_ENEMY) {
foreach (var pair in srcObj.AttackerInfos) {
EntityInfo target = srcObj.SceneContext.GetEntityById(pair.Key);
if (null != target) {
float distSqr = Geometry.DistanceSquare(pos, target.GetMovementStateInfo().GetPosition2D());
if (distSqr <= (srcObj.ViewRange + target.GetRadius()) * (srcObj.ViewRange + target.GetRadius())) {
if (distSqr <= minDistSqr) {
ret = target;
minDistSqr = distSqr;
}
}
}
}
}
return ret;
}
示例10: BuildNpcSkillMessage
internal static Msg_RC_NpcSkill BuildNpcSkillMessage(EntityInfo obj, int skillId)
{
MovementStateInfo msi = obj.GetMovementStateInfo();
ScriptRuntime.Vector3 pos = msi.GetPosition3D();
Msg_RC_NpcSkill msg = new Msg_RC_NpcSkill();
msg.npc_id = obj.GetId();
msg.skill_id = skillId;
msg.stand_pos = ProtoHelper.EncodePosition2D(pos.X, pos.Z);
msg.face_direction = ProtoHelper.EncodeFloat(msi.GetFaceDir());
msg.target_id = obj.GetAiStateInfo().Target;
return msg;
}
示例11: OnAiPursue
private void OnAiPursue(EntityInfo npc, ScriptRuntime.Vector3 target)
{
Scene scene = npc.SceneContext.CustomData as Scene;
if (null != scene) {
npc.GetMovementStateInfo().TargetPosition = target;
float dir = Geometry.GetYRadian(npc.GetMovementStateInfo().GetPosition3D(), target);
npc.GetMovementStateInfo().SetFaceDir(dir);
npc.GetMovementStateInfo().SetMoveDir(dir);
npc.GetMovementStateInfo().IsMoving = true;
if (npc.GetMovementStateInfo().IsMoveStatusChanged) {
npc.GetMovementStateInfo().IsMoveStatusChanged = false;
Msg_RC_NpcMove npcMoveBuilder = DataSyncUtility.BuildNpcMoveMessage(npc);
if (null != npcMoveBuilder)
scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcMove, npcMoveBuilder);
}
}
}
示例12: MoveNpc
private void MoveNpc(EntityInfo obj, long deltaTime)
{
if (obj.IsHaveStateFlag(CharacterState_Type.CST_Sleep)
|| obj.IsHaveStateFlag(CharacterState_Type.CST_FixedPosition)) {
return;
}
MovementStateInfo msi = obj.GetMovementStateInfo();
//npc执行移动时忽略阻挡与避让,这些行为由ai模块在规划其路径时执行。
if (!obj.IsDead() && obj.CanMove && msi.IsMoving && !msi.IsSkillMoving) {
ScriptRuntime.Vector3 pos = msi.GetPosition3D();
float speed = (float)obj.GetActualProperty().MoveSpeed;
float distance = (speed * (float)(int)deltaTime) / 1000.0f;
ScriptRuntime.Vector3 dir = msi.TargetDir;
//LogSystem.Debug("MovementSystem npc:{0} speed:{1} deltaTime:{2} distance:{3}", obj.GetId(), speed, deltaTime, distance);
float x = 0, y = 0;
if (msi.CalcDistancSquareToTarget() < distance * distance) {
x = msi.TargetPosition.X;
y = msi.TargetPosition.Z;
ScriptRuntime.Vector2 newPos = new ScriptRuntime.Vector2(x, y);
msi.SetPosition2D(newPos);
msi.IsMoving = false;
User user = obj.CustomData as User;
if (null != user) {
Msg_RC_NpcMove npcMoveBuilder = DataSyncUtility.BuildNpcMoveMessage(obj);
if (null != npcMoveBuilder) {
Scene scene = user.OwnRoom.ActiveScene;
if (null != scene) {
scene.NotifyAllUser(RoomMessageDefine.Msg_RC_NpcMove, npcMoveBuilder);
}
}
}
} else {
ScriptRuntime.Vector3 tpos = pos + dir * distance;
msi.SetPosition(tpos);
}
}
}
示例13: MoveToNext
private static void MoveToNext(EntityInfo charObj, AiData_ForMoveCommand data, ref Vector3 targetPos)
{
if (++data.Index >= data.WayPoints.Count) {
data.IsFinish = true;
return;
}
var move_info = charObj.GetMovementStateInfo();
targetPos = data.WayPoints[data.Index];
move_info.TargetPosition = targetPos;
}
示例14: DoSkillCommandState
internal static void DoSkillCommandState(EntityInfo entity, long deltaTime, AbstractAiStateLogic logic, int skillId)
{
if (entity.GetMovementStateInfo().IsMoving) {
logic.NotifyAiStopPursue(entity);
}
if (skillId > 0) {
AiStateInfo aiInfo = entity.GetAiStateInfo();
SkillInfo skillInfo = entity.GetSkillStateInfo().GetSkillInfoById(skillId);
if (null != skillInfo) {
if (aiInfo.Target <= 0) {
EntityInfo info;
if (skillInfo.ConfigData.targetType == (int)SkillTargetType.Enemy || skillInfo.ConfigData.targetType == (int)SkillTargetType.RandEnemy) {
info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_ENEMY);
} else {
info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_FRIEND);
}
if (null != info) {
aiInfo.Target = info.GetId();
}
}
if (aiInfo.Target > 0) {
logic.NotifyAiSkill(entity, skillId);
}
}
} else if(!entity.GetSkillStateInfo().IsSkillActivated()) {
logic.AiSendStoryMessage(entity, "npc_skill_finish:" + entity.GetUnitId(), entity.GetId());
logic.AiSendStoryMessage(entity, "obj_skill_finish", entity.GetId());
logic.ChangeToState(entity, (int)AiStateId.Idle);
}
}
示例15: DoPursuitCommandState
internal static void DoPursuitCommandState(EntityInfo entity, long deltaTime, AbstractAiStateLogic logic)
{
AiStateInfo info = entity.GetAiStateInfo();
info.Time += deltaTime;
if (info.Time > 200) {
EntityInfo target = AiLogicUtility.GetLivingCharacterInfoHelper(entity, info.Target);
if (null != target) {
float minDist = entity.GetRadius() + target.GetRadius();
float dist = (float)entity.GetActualProperty().AttackRange + minDist;
float distGoHome = entity.GohomeRange;
Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D();
ScriptRuntime.Vector3 srcPos = entity.GetMovementStateInfo().GetPosition3D();
float dir = Geometry.GetYRadian(new Vector2(targetPos.X, targetPos.Z), new Vector2(srcPos.X, srcPos.Z));
targetPos.X += (float)(minDist * Math.Sin(dir));
targetPos.Z += (float)(minDist * Math.Cos(dir));
float powDist = Geometry.DistanceSquare(srcPos, targetPos);
if (powDist < dist * dist) {
logic.AiSendStoryMessage(entity, "npc_pursuit_finish:" + entity.GetUnitId(), entity.GetId());
logic.AiSendStoryMessage(entity, "obj_pursuit_finish", entity.GetId());
logic.NotifyAiStopPursue(entity);
logic.ChangeToState(entity, (int)AiStateId.Idle);
} else {
logic.NotifyAiPursue(entity, targetPos);
}
} else {
logic.AiSendStoryMessage(entity, "npc_pursuit_exit:" + entity.GetUnitId(), entity.GetId());
logic.AiSendStoryMessage(entity, "obj_pursuit_exit", entity.GetId());
logic.NotifyAiStopPursue(entity);
logic.ChangeToState(entity, (int)AiStateId.Idle);
}
}
}