示例#1
0
 public MateEntity(IPlayerEntity owner, CharacterMateDto dto, NpcMonsterDto npcMonster) : base(VisualType.Monster, dto.Id)
 {
     Owner        = owner;
     Mate         = dto;
     NpcMonster   = npcMonster;
     Level        = dto.Level;
     LevelXp      = dto.Experience;
     Hp           = dto.Hp;
     HpMax        = dto.Hp;
     Mp           = dto.Mp;
     MpMax        = dto.Mp;
     IsTeamMember = dto.IsTeamMember;
     MateType     = dto.MateType;
     PetId        = 0;
     Movable      = new MovableComponent(this, NpcMonster.Speed)
     {
         Actual = new Position <short> {
             X = dto.MapX, Y = dto.MapY
         },
         Destination = new Position <short> {
             X = dto.MapX, Y = dto.MapY
         }
     };
     _visibility    = new VisibilityComponent(this);
     SkillComponent = new SkillComponent(this);
     Components     = new Dictionary <Type, IComponent>
     {
         { typeof(VisibilityComponent), _visibility },
         { typeof(MovableComponent), Movable },
         { typeof(SkillComponent), SkillComponent }
     };
 }
示例#2
0
 /// <summary>
 /// Befores the call.
 /// </summary>
 /// <param name="session">The session.</param>
 public void BeforeCall(IRpcSession session)
 {
     // TODO: Use INotifyChangeCollection to set up
     Role      = session.Get <Entity>();
     MoveState = Role.GetMovable();
     Position  = Role.GetPos();
     Unit      = Role.Get <UnitComponent>();
 }
示例#3
0
 /// <summary>
 /// Creates a new <see cref="MonsterEntity"/> instance.
 /// </summary>
 /// <param name="context"></param>
 public MonsterEntity()
 {
     Moves       = new MovableComponent();
     Timers      = new TimerComponent();
     Follow      = new FollowComponent();
     Interaction = new InteractionComponent();
     Battle      = new BattleComponent();
     Attributes  = new AttributeComponent();
 }
示例#4
0
        public override void Do(PlayerObject player)
        {
            var destination = player.Movable.IntPosition + 2 * Constants.Directions[player.Movable.Direction];

            if (MovableComponent.CanMove(destination))
            {
                player.Movable.Position = destination;
            }
        }
示例#5
0
 /// <summary>
 /// Creates a new <see cref="NpcEntity"/> instance.
 /// </summary>
 /// <param name="context"></param>
 public NpcEntity()
 {
     Object.Type = WorldObjectType.Mover;
     Timers      = new TimerComponent();
     Interaction = new InteractionComponent();
     Battle      = new BattleComponent();
     Attributes  = new AttributeComponent();
     Moves       = new MovableComponent();
     Follow      = new FollowComponent();
 }
示例#6
0
        public PlayerEntity(ISession session, CharacterDto dto, IEnumerable <CharacterSkillDto> skills, IEnumerable <CharacterQuicklistDto> quicklist) : base(VisualType.Character, dto.Id)
        {
            Session   = session;
            Character = dto;
            Relations = new RelationList();
            Quicklist = new QuicklistComponent(this, quicklist);

            HpMax     = Algorithm.GetHpMax(dto.Class, dto.Level);
            Hp        = HpMax;
            MpMax     = Algorithm.GetMpMax(dto.Class, dto.Level);
            Mp        = MpMax;
            BasicArea = 1;
            Inventory = new InventoryComponent(this);
            Movable   = new MovableComponent(this)
            {
                Actual = new Position <short>
                {
                    X = dto.MapX,
                    Y = dto.MapY
                },
                Destination = new Position <short>
                {
                    X = dto.MapX,
                    Y = dto.MapY
                }
            };
            _visibility    = new VisibilityComponent(this);
            SkillComponent = new SkillComponent(this, skills);
            Locomotion     = new LocomotionComponent(this);
            Components     = new Dictionary <Type, IComponent>
            {
                { typeof(VisibilityComponent), _visibility },
                { typeof(InventoryComponent), Inventory },
                { typeof(SkillComponent), SkillComponent },
                { typeof(LocomotionComponent), Locomotion }
            };
            Mates = new List <IMateEntity>();

            #region Stat

            Defence              = (short)Algorithm.GetDefenceClose(Character.Class, Level);
            DefenceDodge         = (short)Algorithm.GetDodgeClose(Character.Class, Level);
            DistanceDefence      = (short)Algorithm.GetDefenceRange(Character.Class, Level);
            DistanceDefenceDodge = (short)Algorithm.GetDodgeRanged(Character.Class, Level);
            MagicalDefence       = (short)Algorithm.GetDefenceMagic(Character.Class, Level);
            MinHit                 = (short)Algorithm.GetMinHit(Character.Class, Level);
            MaxHit                 = (short)Algorithm.GetMaxHit(Character.Class, Level);
            HitRate                = (byte)Algorithm.GetHitRate(Character.Class, Level);
            CriticalChance         = Algorithm.GetHitCritical(Character.Class, Level);
            CriticalRate           = (byte)Algorithm.GetHitCriticalRate(Character.Class, Level);
            DistanceCriticalChance = Algorithm.GetDistCritical(Character.Class, Level);
            DistanceCriticalRate   = Algorithm.GetDistCriticalRate(Character.Class, Level);

            #endregion Stat
        }
示例#7
0
        public override void Move(MovableComponent movable, int direction)
        {
            var position = movable.IntPosition;

            while (MovableComponent.CanMove(position + Constants.Directions[direction]))
            {
                position += Constants.Directions[direction];
            }

            movable.Move(position);
        }
示例#8
0
 public override void Idle(MovableComponent movable)
 {
     foreach (var i in new int[] { 0, 2, 1, 3 })
     {
         var direction = (movable.Direction + i) % 4;
         if (movable.CanMove(direction))
         {
             movable.Move(direction);
             return;
         }
     }
 }
示例#9
0
        protected override void OnUpdate()
        {
            Entity gunEntity = GetSingletonEntity <GunComponent>();

            int pos = 1;

            if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            {
                pos--;
            }

            if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            {
                pos++;
            }

            if (Input.GetKey(KeyCode.Space) && Time.ElapsedTime >= _cooldownTimer)
            {
                GunComponent gunComponent = EntityManager.GetComponentData <GunComponent>(gunEntity);
                _cooldownTimer = Time.ElapsedTime + gunComponent.Cooldown;

                EntityQueryDesc query = new EntityQueryDesc
                {
                    None = new ComponentType[] { ComponentType.ReadOnly <IsMoving>() },
                    All  = new ComponentType[] { typeof(Translation), typeof(MovableComponent), ComponentType.ReadOnly <BulletComponent>() }
                };
                EntityQuery entityQuery = GetEntityQuery(query);
                if (!entityQuery.IsEmptyIgnoreFilter)
                {
                    NativeArray <Entity> entities = entityQuery.ToEntityArray(Allocator.Persistent);
                    Entity           entity       = entities[0];
                    float3           direction    = Quaternion.AngleAxis(60 - 30 * pos, Vector3.back) * Vector3.up;
                    MovableComponent component    = EntityManager.GetComponentData <MovableComponent>(entity);
                    component.Direction = direction;
                    PostUpdateCommands.AddComponent(entity, new IsMoving());
                    PostUpdateCommands.SetComponent(entity, component);
                    entities.Dispose();
                    GameManager.Instance.ShotFired();
                }
            }

            var materialReferencesEntity = GetSingletonEntity <MaterialReferences>();
            var materialReferences       = EntityManager.GetSharedComponentData <MaterialReferences>(materialReferencesEntity);

            RenderMesh renderMesh  = EntityManager.GetSharedComponentData <RenderMesh>(gunEntity);
            Material   newMaterial = materialReferences.GunPositions[pos];

            if (newMaterial != renderMesh.material)
            {
                renderMesh.material = newMaterial;
                PostUpdateCommands.SetSharedComponent(gunEntity, renderMesh);
            }
        }
示例#10
0
 /// <summary>
 /// Creates a new <see cref="PlayerEntity"/> instance.
 /// </summary>
 /// <param name="context"></param>
 public PlayerEntity(IPlayerFactory playerFactory)
 {
     Moves          = new MovableComponent();
     PlayerData     = new PlayerDataComponent();
     Taskbar        = new TaskbarComponent();
     Follow         = new FollowComponent();
     Interaction    = new InteractionComponent();
     Battle         = new BattleComponent();
     Timers         = new TimerComponent();
     Attributes     = new AttributeComponent();
     QuestDiary     = new QuestDiaryComponent();
     SkillTree      = new SkillTreeComponent();
     Inventory      = new InventoryContainerComponent();
     _playerFactory = playerFactory;
 }
示例#11
0
        public MonsterEntity(MapMonsterDto dto, IEnumerable <NpcMonsterSkillDto> skills) : base(VisualType.Monster, dto.Id)
        {
            Movable = new MovableComponent(this, dto.IsMoving ? dto.NpcMonster.Speed : (byte)0)
            {
                Actual = new Position <short> {
                    X = dto.MapX, Y = dto.MapY
                },
                Destination = new Position <short> {
                    X = dto.MapX, Y = dto.MapY
                }
            };
            Speed          = (byte)(dto.IsMoving ? dto.NpcMonster.Speed : 0);
            Level          = dto.NpcMonster.Level;
            Hp             = dto.NpcMonster.MaxHp;
            HpMax          = dto.NpcMonster.MaxHp;
            Mp             = dto.NpcMonster.MaxMp;
            MpMax          = dto.NpcMonster.MaxMp;
            BasicArea      = dto.NpcMonster.BasicArea;
            SkillComponent = new SkillComponent(this, skills);
            NpcMonster     = dto.NpcMonster;
            MapMonster     = dto;
            _visibility    = new VisibilityComponent(this);
            Components     = new Dictionary <Type, IComponent>
            {
                { typeof(VisibilityComponent), _visibility },
                { typeof(MovableComponent), Movable },
                { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, dto) },
                { typeof(SkillComponent), SkillComponent }
            };

            #region Stat

            Defence              = dto.NpcMonster.CloseDefence;
            DefenceDodge         = dto.NpcMonster.DefenceDodge;
            DistanceDefence      = dto.NpcMonster.DistanceDefence;
            DistanceDefenceDodge = dto.NpcMonster.DistanceDefenceDodge;
            MagicalDefence       = dto.NpcMonster.MagicDefence;
            MinHit         = dto.NpcMonster.DamageMinimum;
            MaxHit         = dto.NpcMonster.DamageMaximum;
            HitRate        = (byte)dto.NpcMonster.Concentrate;
            CriticalChance = dto.NpcMonster.CriticalChance;
            CriticalRate   = dto.NpcMonster.CriticalRate;

            #endregion Stat
        }
示例#12
0
        public NpcEntity(MapNpcDto npc, ShopDto shop) : base(VisualType.Npc, npc.Id)
        {
            Movable = new MovableComponent(this, npc.IsMoving ? npc.NpcMonster.Speed : (byte)0)
            {
                Actual        = new Position <short>(npc.MapX, npc.MapY),
                Destination   = new Position <short>(npc.MapX, npc.MapY),
                DirectionType = npc.Position
            };
            Speed          = (byte)(npc.IsMoving ? npc.NpcMonster.Speed : 0);
            MapNpc         = npc;
            Level          = npc.NpcMonster.Level;
            Hp             = npc.NpcMonster.MaxHp;
            Mp             = npc.NpcMonster.MaxMp;
            HpMax          = npc.NpcMonster.MaxHp;
            MpMax          = npc.NpcMonster.MaxMp;
            BasicArea      = npc.NpcMonster.BasicArea;
            Shop           = shop != null ? new Shop(shop, this) : null;
            SkillComponent = new SkillComponent(this);
            _visibility    = new VisibilityComponent(this);
            Components     = new Dictionary <Type, IComponent>
            {
                { typeof(VisibilityComponent), _visibility },
                { typeof(MovableComponent), Movable },
                { typeof(NpcMonsterComponent), new NpcMonsterComponent(this, npc) },
                { typeof(SkillComponent), SkillComponent }
            };

            #region Stat

            Defence              = npc.NpcMonster.CloseDefence;
            DefenceDodge         = npc.NpcMonster.DefenceDodge;
            DistanceDefence      = npc.NpcMonster.DistanceDefence;
            DistanceDefenceDodge = npc.NpcMonster.DistanceDefenceDodge;
            MagicalDefence       = npc.NpcMonster.MagicDefence;
            MinHit  = npc.NpcMonster.DamageMinimum;
            MaxHit  = npc.NpcMonster.DamageMaximum;
            HitRate = (byte)npc.NpcMonster.Concentrate;

            #endregion Stat
        }
示例#13
0
        static void Main(string[] args)
        {
            //TypeLayout.PrintLayout<OOP.Customer>();
            //TypeLayout.PrintLayout<DOD.CustomerValue>();

            OOP.Node root = new Node(3);
            root.AddChild(new Node(4));
            OOP.Node right = new Node(5);
            right.AddChild(new Node(6));
            root.AddChild(right);
            root.Process();

            DOD.Tree tree = new Tree(root);
            tree.Process();

            ECS.Manager manager = new Manager();
            manager.RegisterSystem(new MoveSystem());
            manager.RegisterSystem(new RenderingSystem());

            ECS.Entity entity        = manager.CreateEntity();
            var        startPosition = new PositionComponent()
            {
                X = 0.0, Y = 0.0
            };
            var initialMovement = new MovableComponent()
            {
                Direction = 0.0, Speed = 1.0
            };

            ComponentManager <PositionComponent> .Register(in entity, in startPosition);

            ComponentManager <MovableComponent> .Register(in entity, in initialMovement);

            manager.Update();
            manager.Update();
        }
示例#14
0
 private void Awake() =>
 movable = GetComponent <MovableComponent>();
示例#15
0
 public virtual void Move(MovableComponent movable, int direction) =>
 movable.Move(direction);
示例#16
0
 public virtual void Idle(MovableComponent movable)
 {
 }
示例#17
0
 public Bubi()
 {
     InitializeComponent();
     movableComponent = new MovableComponent(this, Padding.Empty);
 }
示例#18
0
 public Bubi(string data)
 {
     InitializeComponent();
     movableComponent = new MovableComponent(this, Padding.Empty);
     SetItemData(data);
 }