当前位置: 首页>>代码示例>>C#>>正文


C# EntityInfo.IsHaveStateFlag方法代码示例

本文整理汇总了C#中GameFramework.EntityInfo.IsHaveStateFlag方法的典型用法代码示例。如果您正苦于以下问题:C# EntityInfo.IsHaveStateFlag方法的具体用法?C# EntityInfo.IsHaveStateFlag怎么用?C# EntityInfo.IsHaveStateFlag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GameFramework.EntityInfo的用法示例。


在下文中一共展示了EntityInfo.IsHaveStateFlag方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: 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);
                }
            }
        }
开发者ID:dreamanlan,项目名称:CSharpGameFramework,代码行数:40,代码来源:MovementSystem.cs

示例2: CanSee

 public static bool CanSee(EntityInfo source, EntityInfo target, float distSqr, Vector3 pos1, Vector3 pos2)
 {
     bool ret = false;
     if (null != source && null != target) {
         //一、先判断距离
         if (distSqr < source.ViewRange * source.ViewRange) {
             //二、再判断逻辑
             //后面修改的同学注意下:
             //1、我们目前的object层是数据接口层,是不需要使用多态的。概念变化的可能性比功能变化的可能性要小很多,所以我们将多态机制应用到Logic里。
             //2、逻辑上的影响可能是对象buff或类型产生,如果判断逻辑比较复杂,采用结构化编程的风格拆分成多个函数即可。
             //3、另一个不建议用多态理由是这个函数的调用频率会很高。
             if (source.GetCampId() == target.GetCampId() ||
               (!target.IsHaveStateFlag(CharacterState_Type.CST_Hidden))) {//隐身状态判断(未考虑反隐)
                 ret = true;//移动版本不计算视野,只考虑逻辑上的几个点供ai用
             }
         }
     }
     return ret;
 }
开发者ID:dreamanlan,项目名称:CSharpGameFramework,代码行数:19,代码来源:Entity_Base.cs


注:本文中的GameFramework.EntityInfo.IsHaveStateFlag方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。