Example #1
0
 public void StopAllReleaserByCharacter(BattleCharacter character)
 {
     State.Each <MagicReleaser>(t => {
         if (t.ReleaserTarget.Releaser == character)
         {
             t.SetState(ReleaserStates.Ended);//防止AI错误
             GObject.Destory(t);
         }
         return(false);
     });
 }
Example #2
0
    public void ReleaseMagic(MagicData magic)
    {
        Resources.UnloadUnusedAssets();

        if (currentReleaser != null)
        {
            GObject.Destory(currentReleaser);
        }

        var per = curState.Perception as BattlePerception;

        this.currentReleaser = per.CreateReleaser(magic,
                                                  new GameLogic.Game.LayoutLogics.ReleaseAtTarget(this.releaser, this.target),
                                                  ReleaserType.Magic);
    }
        private void ProcessJoinClient()
        {
            var per  = State.Perception as BattlePerception;
            var view = per.View as GameViews.BattlePerceptionView;

            lock (syncRoot)
            {
                //send Init message.
                while (_addTemp.Count > 0)
                {
                    var client = _addTemp.Dequeue();
                    Clients.Add((long)client.UserState, client);
                    BattlePlayer battlePlayer;
                    //package
                    if (BattlePlayers.TryToGetValue((long)client.UserState, out battlePlayer))
                    {
                        var package = battlePlayer.GetNotifyPackage();
                        package.TimeNow = (Now.Time);
                        client.SendMessage(NetProtoTool.ToNetMessage(MessageClass.Notify, package));
                    }

                    var createNotify = view.GetInitNotify();
                    var messages     = ToMessages(createNotify);
                    //Notify package
                    foreach (var i in messages)
                    {
                        client.SendMessage(i);
                    }
                }
                while (_kickUsers.Count > 0)
                {
                    //kick
                    var u = _kickUsers.Dequeue();
                    BattlePlayers.Remove(u);
                    Clients.Remove(u);
                    per.State.Each <BattleCharacter>((el) =>
                    {
                        if (el.UserID == u)
                        {
                            GObject.Destory(el);
                        }
                        return(false);
                    });
                }
            }
        }
Example #4
0
        public override GAction GetAction(GTime time, GObject current)
        {
            //var per = this.Perception as BattlePerception;
            var missile = current as BattleMissile;

            switch (missile.State)
            {
            case MissileState.NoStart:
            {
                var distance = UVector3.Distance(
                    missile.Releaser.ReleaserTarget.Releaser.View.Transform.position,
                    missile.Releaser.ReleaserTarget.ReleaserTarget.View.Transform.position);
                missile.TotalTime = distance / missile.Layout.speed;
                missile.TimeStart = time.Time;
                missile.State     = MissileState.Moving;
                missile.Releaser.OnEvent(Layout.EventType.EVENT_MISSILE_CREATE);
            }
            break;

            case MissileState.Moving:
            {
                if ((time.Time - missile.TimeStart) >= missile.TotalTime)
                {
                    missile.Releaser.OnEvent(Layout.EventType.EVENT_MISSILE_HIT);
                    missile.State = MissileState.Hit;
                }
            }
            break;

            case MissileState.Hit:
            {
                missile.Releaser.OnEvent(Layout.EventType.EVENT_MISSILE_DEAD);
                missile.State = MissileState.Death;
            }
            break;

            case MissileState.Death:
                GObject.Destory(missile);
                break;
            }
            return(GAction.Empty);
        }
Example #5
0
        public override GAction GetAction(GTime time, GObject current)
        {
            var releaser = current as MagicReleaser;

            releaser.TickTimeLines(time);

            switch (releaser.State)
            {
            case ReleaserStates.NOStart:
            {
                releaser.OnEvent(Layout.EventType.EVENT_START);
                releaser.SetState(ReleaserStates.Releasing);
                //tick
                if (releaser.Magic.triggerDurationTime > 0)
                {
                    releaser.LastTickTime  = time.Time;
                    releaser.tickStartTime = time.Time;
                    releaser.OnEvent(Layout.EventType.EVENT_TRIGGER);
                }
            }
            break;

            case ReleaserStates.Releasing:
            {
                if (releaser.Magic.triggerTicksTime > 0)
                {
                    if (releaser.tickStartTime + releaser.Magic.triggerDurationTime > time.Time)
                    {
                        if (releaser.LastTickTime + releaser.Magic.triggerTicksTime < time.Time)
                        {
                            releaser.LastTickTime = time.Time;
                            releaser.OnEvent(Layout.EventType.EVENT_TRIGGER);
                        }
                        break;
                    }
                }

                if (releaser.IsCompleted)
                {
                    releaser.SetState(ReleaserStates.ToComplete);
                }
            }
            break;

            case ReleaserStates.ToComplete:
            {
                releaser.OnEvent(Layout.EventType.EVENT_END);
                releaser.SetState(ReleaserStates.Completing);
            }
            break;

            case ReleaserStates.Completing:
            {
                if (releaser.IsCompleted)
                {
                    releaser.SetState(ReleaserStates.Ended);
                }
            }
            break;

            case ReleaserStates.Ended:
            {
                if (releaser.IsCompleted)
                {
                    GObject.Destory(releaser);
                }
            }
            break;
            }
            return(GAction.Empty);
        }