public void ClickDel(UISimpleGameDataButton button, PointerEventData.InputButton buttonEvent)
        {
            var item = button.Data as Entity;

            if (item != null)
            {
                World.Get <ContainerSystem>().TryAdd(Player.MainInventory, item);
            }
        }
Example #2
0
        public static void PostImpactEvent(CharacterTemplate origin, CharacterTemplate target, BaseActionTemplate action, Vector3 hitPoint,
                                           Vector3 hitNormal)
        {
            var hitRotation = hitNormal == Vector3.zero ? Quaternion.identity : Quaternion.LookRotation(hitNormal);
            var ae          = new ActionEvent(action, origin, target, hitPoint, hitRotation, ActionState.Impact);

            World.Get <RulesSystem>().Post(new ImpactEvent(action, origin, target, hitPoint, hitNormal));
            origin.Post(ae);
        }
Example #3
0
        private void RunUpdate(ref SensorDetectingNode node)
        {
            var sensor = node.Sensor;

            sensor.DetectedCells.Clear();
            var start = node.Position.Position;

            sensor.LastDetectedCenter = start;
            var fwd = node.Tr.ForwardDirection2D();
            var ls  = World.Get <LineOfSightSystem>();

            for (int i = 0; i < DirectionsExtensions.Length2D; i++)
            {
                var dir            = (Directions)i;
                var maxRowDistance = dir == fwd ? sensor.MaxVisionDistance : sensor.MaxHearDistance;
                var adjacent       = dir.Adjacent();
                ShadowFloodFill.CheckRow(
                    ref sensor.DetectedCells, start, start,
                    maxRowDistance, new[] { adjacent[0].ToPoint3(), adjacent[1].ToPoint3() }, dir.ToPoint3());
            }
            for (int i = 0; i < _occupyNodes.Max; i++)
            {
                if (_occupyNodes.IsInvalid(i))
                {
                    continue;
                }
                var visible = _occupyNodes[i];
                if (visible.Entity == node.Entity)
                {
                    continue;
                }
                if (!sensor.DetectedCells.Contains(visible.Position))
                {
                    continue;
                }
                var isVision = true;
                if (CheckVision)
                {
                    ls.CanSeeOrHear(node.Entity, visible.Entity, out isVision);
                }
                sensor.AddWatch(visible.Entity, isVision);
            }
            for (int w = sensor.WatchTargets.Count - 1; w >= 0; w--)
            {
                if (sensor.WatchTargets[w].Target == null)
                {
                    sensor.RemoveWatch(sensor.WatchTargets[w]);
                    continue;
                }
                sensor.WatchTargets[w].LastSensedTurnCount++;
                if (sensor.WatchTargets[w].LastSensedTurnCount > MaxTurnsNpcVisible)
                {
                    sensor.RemoveWatch(sensor.WatchTargets[w]);
                }
            }
        }
 private void Update(ref Command node)
 {
     if (node.TryComplete())
     {
         node.Complete();
         World.Get <TurnBasedSystem>().CommandComplete(node.Owner);
         _commands.Remove(node);
         Store(node);
     }
 }
Example #5
0
        public void Collision(Entity hitEntity)
        {
            var template = hitEntity.GetTemplate <CharacterTemplate>();

            if (template != null && template.Tags.Contain(EntityTags.Player))
            {
                World.Get <RulesSystem>().Post(new HealingEvent(null, _amount, template, template, _vital));
                ItemPool.Despawn(gameObject);
            }
        }
        public static ParticlePlayer PlayParticle(SpriteParticle particle, Vector3 pos, Quaternion rot)
        {
            var ps     = World.Get <SpriteParticleSystem>();
            var player = ps.GetPlayer();

            player.Tr.position = pos;
            player.Tr.rotation = rot;
            player.PlayAnimation(particle);
            ps._current.Add(player);
            return(player);
        }
Example #7
0
 public static void GetVisiblePoints(Point3 start, int maxRowDistance, Action <LevelCell> del, Func <LevelCell, bool> ignoreCheck)
 {
     if (World.Get <MapSystem>().GetCell(start) == null)
     {
         return;
     }
     CheckRow(start, start, maxRowDistance, del, ignoreCheck, new[] { new Point3(0, 0, 1), new Point3(0, 0, -1) }, new Point3(-1, 0, 0));
     CheckRow(start, start, maxRowDistance, del, ignoreCheck, new[] { new Point3(0, 0, 1), new Point3(0, 0, -1) }, new Point3(1, 0, 0));
     CheckRow(start, start, maxRowDistance, del, ignoreCheck, new[] { new Point3(1, 0, 0), new Point3(-1, 0, 0) }, new Point3(0, 0, 1));
     CheckRow(start, start, maxRowDistance, del, ignoreCheck, new[] { new Point3(1, 0, 0), new Point3(-1, 0, 0) }, new Point3(0, 0, -1));
 }
 private void RunTurn()
 {
     if (_current.IsPlayer())
     {
         World.Get <PlayerTurnBasedSystem>().TurnContinue(_current);
     }
     else
     {
         World.Get <NpcTurnBasedSystem>().TurnContinue(_current);
     }
 }
Example #9
0
 public bool EquipToEmpty(Entity actionEntity)
 {
     for (int i = 0; i < _list.Count; i++)
     {
         if (_list[i].Item == null && World.Get <EquipmentSystem>().TryEquip(_list[i], actionEntity))
         {
             return(true);
         }
     }
     return(false);
 }
 public static void AddItemToPlayer()
 {
     if (World.Get <ContainerSystem>().TryAdd(Player.MainInventory, CurrentData))
     {
         Take();
     }
     else
     {
         ClearData();
     }
 }
Example #11
0
        public static void HealEntity(int entityId, int amount)
        {
            var entity = EntityController.GetEntity(entityId);

            if (entity == null)
            {
                Console.Log("No Entity " + entityId);
                return;
            }
            World.Get <RulesSystem>().Post(new HealingEvent(amount, null, null, "Vitals.Health"));
            Console.Log(entity.Get <StatsContainer>().GetVital("Vitals.Health").ToLabelString());
        }
Example #12
0
 public void Handle(ActionStateEvent arg)
 {
     if (arg.State == ActionStateEvents.Start)
     {
         Triggered = false;
     }
     else if (arg.State == ActionStateEvents.Impact && !Triggered)
     {
         Triggered = true;
         World.Get <RadiusSystem>().HandleRadius(EntityController.GetEntity(arg.Origin), EntityController.GetEntity(arg.Focus), Radius);
     }
 }
Example #13
0
 private void StartTurn()
 {
     _current.Entity.Post(new StartTurnEvent(_current.Entity));
     if (_current.IsPlayer())
     {
         World.Get <PlayerTurnBasedSystem>().TurnStart(_current);
     }
     else
     {
         World.Get <NpcTurnBasedSystem>().TurnStart(_current);
     }
 }
Example #14
0
 public bool Remove(Entity entity)
 {
     for (int i = 0; i < Count; i++)
     {
         if (this[i] == entity)
         {
             World.Get <EquipmentSystem>().ClearEquippedItem(_list[i], false);
             return(true);
         }
     }
     return(false);
 }
        public static void PrintLog()
        {
            var log = World.Get <CollisionEventSystem>()._eventLog;

            foreach (var msg in log.InOrder())
            {
                Console.Log(string.Format("{5}: {0} hit {1} at {2} {3} source {4}",
                                          msg.Origin?.Entity.DebugId ?? "null",
                                          msg.Target?.Entity.DebugId ?? "null",
                                          msg.HitPoint, msg.HitNormal, msg.Source.DebugId, log.GetTime(msg)));
            }
        }
Example #16
0
        public static bool SatisfiesCondition(this CommandTargeting targeting, Entity target)
        {
            if (targeting.Criteria == TargetType.Any && targeting.Range <= 0)
            {
                return(true);
            }
            var owner = targeting.GetEntity();

            if (owner == null)
            {
                return(true);
            }
            switch (targeting.Criteria)
            {
            case TargetType.Enemy:
                if (!World.Get <FactionSystem>().AreEnemies(owner, target))
                {
                    return(false);
                }
                break;

            case TargetType.Friendly:
                if (!World.Get <FactionSystem>().AreFriends(owner, target))
                {
                    return(false);
                }
                break;

            case TargetType.Self:
                if (target != null && target.Id != targeting.Owner)
                {
                    return(false);
                }
                break;
            }
            if (targeting.RequireLoS)
            {
                if (target != null && !World.Get <LineOfSightSystem>().CanSee(owner, target))
                {
                    return(false);
                }
                if (target == null)
                {
                    return(false);
                }
            }
            if (targeting.Range > 0.25f)
            {
                var dist = DistanceSystem.GetDistance(owner, target);
                return(dist <= targeting.Range);
            }
            return(true);
        }
Example #17
0
 void OnCollisionEnter(Collision collision)
 {
     if (collision.transform.CompareTag(StringConst.TagPlayer))
     {
         var entity = UnityToEntityBridge.GetEntity(collision.collider).GetTemplate <CharacterTemplate>();
         if (entity != null)
         {
             World.Get <RulesSystem>().Post(new HealingEvent(null, _amount, entity, entity, _vital));
             ItemPool.Despawn(gameObject);
         }
     }
 }
Example #18
0
        public void HandleGlobal(DeathEvent arg)
        {
            var logSystem = World.Get <GameLogSystem>();

            logSystem.StartNewMessage(out var logMsg, out var hoverMsg);
            logMsg.Clear();
            logMsg.Append(arg.Caused.GetName());
            logMsg.Append(" killed ");
            logMsg.Append(arg.Target.GetName());
            logSystem.PostCurrentStrings(GameLogSystem.DeathColor);
            arg.Target.Tags.Add(EntityTags.IsDead);
            arg.Target.Tags.Add(EntityTags.CantMove);
        }
 protected override void TryDrop() {
     var newItem = UIDragDropHandler.CurrentData;
     if (World.Get<EquipmentSystem>().TryEquip(_slot, newItem)) {
         UIDragDropHandler.Take();
     }
     else {
         if (PlayAudio) {
             AudioPool.PlayClip(StringConst.AudioDefaultItemReturn, transform.position, 0, AudioVolume);
         }
         UIFloatingText.InventoryMessage(_slot.LastEquipStatus, RectTransform);
         UIDragDropHandler.Return();
     }
 }
        public void HandleGlobal(CollisionEvent msg)
        {
            _eventLog.Add(msg);
            if (msg.Hit < 0)
            {
                msg.Hit = CollisionResult.Hit;
                for (int h = 0; h < _globalHandlers.Count; h++)
                {
                    msg.Hit = MathEx.Min(_globalHandlers[h].CheckHit(msg), msg.Hit);
                }
            }
            if (msg.Hit <= 0)
            {
                return;
            }
            var criticalHit = msg.Target.Entity.Get <CriticalHitCollider>();

            if (criticalHit != null && criticalHit.IsCritical(msg.Target.Tr, msg.HitPoint))
            {
                msg.Hit = CollisionResult.CriticalHit;
            }
            var ae = new ActionEvent(msg.Origin.Entity, msg.Target.Entity, msg.HitPoint,
                                     msg.HitNormal == Vector3.zero ? Quaternion.identity :Quaternion.LookRotation(msg.HitNormal),
                                     ActionState.Impact);
            var origin = msg.Origin.Entity.FindTemplate <CharacterTemplate>();

            World.Get <RulesSystem>().Post(new ImpactEvent(msg, ae.Action, origin, msg.Target.Entity.FindTemplate <CharacterTemplate>()));
            msg.Origin.Post(ae);
            if (!_collisionMessage)
            {
                return;
            }
            _collisionString.Clear();
            _collisionString.Append(msg.Origin.GetName());
            if (msg.Hit == CollisionResult.CriticalHit)
            {
                _collisionString.Append(" critically hit ");
            }
            else
            {
                _collisionString.Append(" struck ");
            }
            _collisionString.Append(msg.Target.GetName());
            MessageKit <UINotificationWindow.Msg> .post(Messages.MessageLog, new UINotificationWindow.Msg(
                                                            _collisionString.ToString(), "", Color.blue));

            if (msg.Target.Entity.HasComponent <DespawnOnCollision>())
            {
                msg.Target.Entity.Destroy();
            }
        }
Example #21
0
        public static bool IsValidCollision(Entity entity, bool limitEnemy, Entity hitEntity, Collider collider, out CollidableTemplate
                                            sourceTemplate, out CollidableTemplate targetTemplate)
        {
            sourceTemplate = targetTemplate = null;
            if (hitEntity == entity)
            {
                return(false);
            }
            var tr = collider.transform;

            if (tr.CompareTag(StringConst.TagInvalidCollider) ||
                tr.CompareTag(StringConst.TagSensor))
            {
                return(false);
            }
            if (!hitEntity.Tags.Contain(EntityTags.CanUnityCollide))
            {
                return(false);
            }
            if (AreEntitiesConnected(hitEntity, entity))
            {
                return(false);
            }
#if DEBUG
            DebugLog.Add(entity.DebugId + " hit actor " + tr.name);
#endif
            sourceTemplate = entity.FindTemplate <CollidableTemplate>();
            targetTemplate = hitEntity.FindTemplate <CollidableTemplate>();
            if (sourceTemplate == null || targetTemplate == null || sourceTemplate == targetTemplate)
            {
                return(false);
            }
            if (limitEnemy)
            {
                if (World.Get <FactionSystem>().AreEnemies(sourceTemplate.Entity, targetTemplate.Entity))
                {
                    if (entity.Tags.IsConfused)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (!entity.Tags.IsConfused)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Example #22
0
        private void CheckBuy(int index)
        {
            if (index > 0 || Data == null)
            {
                return;
            }
            var sellPrice = RulesSystem.TotalPrice(InventoryItem);

            if (World.Get <ContainerSystem>().TryAdd(Player.MainInventory, Data))
            {
                StatusMessages(string.Format("Bought for {0} {1}", sellPrice, GameText.DefaultCurrencyLabel));
                Clear();
            }
        }
Example #23
0
        public bool CanRuleEventStart(ref InstantKillEvent context)
        {
            var success   = RulesSystem.DiceRollSuccess(context.InstantKill.Chance);
            var logSystem = World.Get <GameLogSystem>();

            logSystem.StartNewMessage(out var logMsg, out var hoverMsg);
            logMsg.Append(context.Origin.GetName());
            logMsg.Append(" used instant kill on ");
            logMsg.Append(context.Target.GetName());
            logMsg.Append(success ? " and succeeded" : " and failed");
            hoverMsg.AppendNewLine(RulesSystem.LastQueryString.ToString());
            logSystem.PostCurrentStrings(!success ? GameLogSystem.NormalColor : GameLogSystem.DeathColor);
            return(success);
        }
Example #24
0
        public static void PrintLog()
        {
            var log = World.Get <DamageSystem>()._eventLog;

            foreach (var msg in log.InOrder())
            {
                Console.Log(
                    string.Format(
                        "{5}: Damage {0} hit {1} Amount {2} Type {3} Vital {4}",
                        msg.Origin?.Entity.DebugId ?? "null",
                        msg.Target?.Entity.DebugId ?? "null",
                        msg.Amount, msg.DamageType, msg.TargetVital, log.GetTime(msg)));
            }
        }
Example #25
0
        public static void PrintLog()
        {
            var log = World.Get <ActionSystem>()._eventLog;

            foreach (var msg in log.InOrder())
            {
                Console.Log(
                    string.Format(
                        "{5}: Action source {0} target {1} at {2} {3} State {4}",
                        msg.Origin?.Entity.DebugId ?? "null",
                        msg.Target?.Entity.DebugId ?? "null",
                        msg.Position, msg.Rotation, msg.State, log.GetTime(msg)));
            }
        }
Example #26
0
 public virtual void OnPointerClick(PointerEventData eventData)
 {
     if (_watchedMod == null)
     {
         return;
     }
     if (eventData.button == PointerEventData.InputButton.Right)
     {
         if (_watchedMod.Value.Target.HasComponent <PlayerComponent>())
         {
             World.Get <ModifierSystem>().RemoveStatMod(_watchedMod.Value.Id);
         }
     }
 }
Example #27
0
        public static void OnUsage(ActionEvent ae, ActionCommand cmd, string stat)
        {
            var prepareDamage = new PrepareDamageEvent(ae.Origin, ae.Target, cmd.Action, cmd.HitResult);
            var damageStat    = cmd.Owner.Stats.Get <DiceStat>(stat);

            if (damageStat == null)
            {
                return;
            }
            var total = cmd.HitResult.Result == CollisionResult.CriticalHit ? damageStat.GetMax() : damageStat.Value;

            prepareDamage.Entries.Add(new DamageEntry(total, cmd.Action.Data.GetString(AbilityDataEntries.DamageType), Stats.Health, "Weapon Attack"));
            World.Get <RulesSystem>().Post(prepareDamage);
        }
Example #28
0
 public bool EquipToHidden(Entity actionEntity)
 {
     for (int i = 0; i < _list.Count; i++)
     {
         if (_list[i].Type != PivotTypes.Hidden)
         {
             continue;
         }
         if (_list[i].Item == null && World.Get <EquipmentSystem>().TryEquip(_list[i], actionEntity))
         {
             return(true);
         }
     }
     return(false);
 }
Example #29
0
 public void Trigger(ActionEvent stateEvent, string eventName)
 {
     if (!stateEvent.Origin.IsPlayer())
     {
         return;
     }
     if (IsRotation)
     {
         World.Get <EntityEventSystem>().Post(new CameraRotationForceEvent(stateEvent.Rotation.eulerAngles, Frames));
     }
     else
     {
         World.Get <EntityEventSystem>().Post(new CameraPositionForceEvent(stateEvent.Rotation.eulerAngles, Frames));
     }
 }
Example #30
0
 private bool TryEquip(Equipment equip, Entity entity, bool overrideCurrent)
 {
     for (int i = 0; i < _list.Count; i++)
     {
         if (_list[i].Item != null && !overrideCurrent)
         {
             continue;
         }
         if (_list[i].CompatibleSlots.Contains(equip.EquipmentSlotType) && World.Get <EquipmentSystem>().TryEquip(_list[i], entity))
         {
             return(true);
         }
     }
     return(false);
 }