public void StopAllReleaserByCharacter(BattleCharacter character) { State.Each <MagicReleaser>(t => { if (t.ReleaserTarget.Releaser == character) { t.SetState(ReleaserStates.Ended);//防止AI错误 GObject.Destory(t); } return(false); }); }
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); }); } } }
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); }
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); }