public SceneGaming() { SceneTimeFix = 1.4F; MenuCooldownCounter = new CounterObject(Sec(2)); EndDelay = new CounterObject(Global.DefaultEndDelayLimit); IntervalOfWave = Global.DefaultIntervalOfWave; WaveNo = new CounterObject(0); Waves = new List <WaveLine>(); WaveEvents = new Dictionary <string, WaveEventHandle>(); _UIPlayName = new ObjectUI(75, 20, 150, 25, new DrawUIText(Color.Black, Color.WhiteSmoke, Color.Empty, Color.Empty, 0, 0, GlobalPlayer.PlayerName, new Font("微軟正黑體", 11), GlobalFormat.MiddleLeft)); _UIEnergyBar = new ObjectUI(80, 45, 150, 15, new DrawUICounterBar(GlobalColors.EnergyBar, Color.Black, Color.AliceBlue, 2, false)); _UISkillIcon1 = new ObjectUI(250, 10, 50, 50, _DrawSkill1); _UISkillIcon2 = new ObjectUI(320, 10, 50, 50, _DrawSkill2); Skill1 = GlobalScenes.ChoiceSkill1; Skill2 = GlobalScenes.ChoiceSkill2; UIObjects.Add(_UISkillIcon1); UIObjects.Add(_UISkillIcon2); UIObjects.Add(_UIPlayName); UIObjects.Add(_UIEnergyBar); GameObjects.ObjectDead += OnObjectDead; ShowMenu = false; }
/// <summary> /// 特性基礎物件初始化 /// </summary> public PropertyBase() { Target = new TargetSet(); DurationTime = new CounterObject(-1); Target.ObjectChanged += (s, o, n) => { OnTargetObjectChanged(o, n); }; }
/// <summary> /// 新增能量條繪圖物件 /// </summary> /// <param name="drawColor">繪圖工具管理物件</param> /// <param name="borderWidth">框線粗細</param> /// <param name="reverse">是否反向顯示</param> /// <param name="bindObject">綁定物件</param> public DrawUICounterBar(DrawColors drawColor, int borderWidth, bool reverse, CounterObject bindingCounter = null) : base(drawColor) { BorderWidth = borderWidth; Reverse = reverse; BindingCounter = bindingCounter; }
/// <summary> /// 使用繪製物件和移動物件建立互動性活動物件 /// </summary> /// <param name="drawObject">繪製物件</param> /// <param name="moveObject">移動物件</param> public ObjectActive(DrawBase drawObject, MoveBase moveObject) : base(drawObject, moveObject) { Skills = new SkillCollection(); Energy = new CounterObject(Global.DefaultEnergyLimit, Global.DefaultEnergyLimit, false); EnergyGetPerSec = Global.DefaultEnergyGetPerSec; }
/// <summary> /// 擁有此特性的物件死亡時會逐漸縮小(放大)並淡出 /// </summary> /// <param name="fadeTime">縮小/淡出時間計時器(毫秒)</param> /// <param name="fadeTime">計時器結束時大小比例</param> /// <param name="fadeTime">計時器結束時透明度</param> /// <param name="deadType">符合指定的死亡方式才會觸發</param> public PropertyDeadSmoke(int fadeTime, float finelScale, float finelOpacity, ObjectDeadType deadType) { DeadType = deadType; FadeTime = new CounterObject(fadeTime); FinelScale = finelScale; FinelOpacity = finelOpacity; BreakAfterDead = false; }
/// <summary> /// 新增瘋狗擺頭特性,擁有此特性的物件往目標移動時會產生偏移 /// </summary> /// <param name="durationTime">持續時間</param> /// <param name="changeTime">方向改變間格(毫秒)</param> /// <param name="offsetAngleMin">方向偏移最小值</param> /// <param name="offsetAngleMax">方向偏移最大值</param> /// <param name="anglePerChange">每次偏移值,0為每次偏移後為隨機角度</param> public PropertyDrunken(int durationTime, int changeTime, int offsetAngleMin, int offsetAngleMax, int anglePerChange) { DurationTime.Limit = durationTime; OffsetAngleMin = offsetAngleMin; OffsetAngleMax = offsetAngleMax; AnglePerChange = anglePerChange; ChangeTime = new CounterObject(changeTime); }
/// <summary> /// 基本特效建構式 /// </summary> /// <param name="enablingTime">生效時間</param> /// <param name="durationTime">持續時間</param> /// <param name="disablingTime">消退時間</param> public EffectBase(int enablingTime, int durationTime, int disablingTime) { EnablingTime = new CounterObject(enablingTime); DurationTime = new CounterObject(durationTime); DisablingTime = new CounterObject(disablingTime); _Status = enablingTime == 0 ? EffectStatus.Enabled : EffectStatus.Enabling; CanBreak = true; }
/// <summary> /// 新增逐漸輪替畫面顏色的特效 /// </summary> /// <param name="colors">要繪製的顏色陣列</param> /// <param name="durationTime">持續時間(毫秒),小於0為永久</param> /// <param name="rotateTime">輪替時間(毫秒)</param> /// <param name="convertTime">轉換時間(毫秒)</param> public EffectDyeingRotate(Color[] colors, int durationTime, int rotateTime, int convertTime) : base(rotateTime, durationTime, rotateTime) { Status = EffectStatus.Enabling; Colors = colors; _RotateTime = new CounterObject(rotateTime); _ConvertTime = new CounterObject(convertTime); }
/// <summary> /// 新增誘餌技能,放出分身 /// </summary> /// <param name="costEnergy">耗費能量</param> /// <param name="cooldown">冷卻時間(毫秒)</param> /// <param name="baitLife">誘餌生命(毫秒)</param> /// <param name="baitSpeed">誘餌速度</param> public SkillBait(int costEnergy, int cooldown, int baitLife, int baitSpeed) { Status = SkillStatus.Disabled; CostEnergy = costEnergy; Cooldown = new CounterObject(cooldown); BaitLife = baitLife; BaitSpeed = baitSpeed; }
/// <summary> /// 使用繪圖工具管理物件新增文字繪圖物件 /// </summary> /// <param name="drawColor">繪圖工具管理物件</param> /// <param name="borderWidtrh">框線粗細</param> /// <param name="readius">圓角大小</param> /// <param name="text">文字</param> /// <param name="font">字型</param> /// <param name="drawFormat">繪製設定</param> /// <param name="animation">切換時間</param> public DrawUITextScroll(DrawColors drawColor, int borderWidtrh, int readius, string text, Font font, StringFormat drawFormat, int animation) : base(drawColor, borderWidtrh, readius, "", font, drawFormat) { Animation = new CounterObject(animation); Text = text; IncompleteShow = true; IgnoreSameText = false; }
/// <summary> /// 新增睡眠技能,恢復能量 /// </summary> /// <param name="costEnergy">耗費能量</param> /// <param name="cooldown">冷卻時間(毫秒)</param> /// <param name="channeled">持續時間(毫秒)</param> public SkillSleep(int getEnergyPerSec, int channeled, int cooldown) { Status = SkillStatus.Disabled; GetEnergyPerSec = getEnergyPerSec; Channeled = new CounterObject(channeled); Cooldown = new CounterObject(cooldown); Animation = new CounterObject(100); }
/// <summary> /// 新增護盾技能,護盾破除之前無敵 /// </summary> /// <param name="collisionPower">護盾撞擊力量</param> /// <param name="costEnergy">耗費能量</param> /// <param name="costEnergyPerSec">每秒耗費能量</param> /// <param name="channeled">最大引導時間(毫秒</param> /// <param name="cooldown">冷卻時間(毫秒)</param> public SkillShield(int collisionPower, int costEnergy, int costEnergyPerSec, int channeled, int cooldown) { Status = SkillStatus.Disabled; CollisionPower = collisionPower; CostEnergy = costEnergy; CostEnergyPerSec = costEnergyPerSec; Channeled = new CounterObject(channeled); Cooldown = new CounterObject(cooldown); }
/// <summary> /// 新增能量條繪圖物件 /// </summary> /// <param name="mainColor">條棒顏色</param> /// <param name="borderColor">外框顏色</param> /// <param name="backColor">底色</param> /// <param name="borderWidth">框線粗細</param> /// <param name="reverse">是否反向顯示</param> /// <param name="bindObject">綁定物件</param> public DrawUICounterBar(Color mainColor, Color borderColor, Color backColor, int borderWidth, bool reverse, CounterObject bindingCounter = null) { Colors.SetColor("Main", mainColor); Colors.SetColor("Border", borderColor); Colors.SetColor("Back", backColor); BorderWidth = borderWidth; Reverse = reverse; BindingCounter = bindingCounter; }
/// <summary> /// 新增衝刺技能,提升最後一次移動距離 /// </summary> /// <param name="costEnergy">耗費能量</param> /// <param name="cooldown">冷卻時間(毫秒)</param> /// <param name="speedMultiple">衝刺距離倍數(以所有者速度為基準)</param> /// <param name="speedConstant">衝刺距離常數</param> /// <param name="smoking">是否加上冒煙特效</param> public SkillSprint(int costEnergy, int cooldown, int speedMultiple, int speedConstant, bool smoking) { Status = SkillStatus.Disabled; CostEnergy = costEnergy; Cooldown = new CounterObject(cooldown); SpeedMultiple = speedMultiple; SpeedConstant = speedConstant; Smoking = smoking; }
/// <summary> /// 新增子彈時間技能 降低世界速度 /// </summary> /// <param name="costEnergy">耗費能量</param> /// <param name="costEnergyPerSec">每秒耗費能量</param> /// <param name="channeled">最大引導時間(毫秒</param> /// <param name="cooldown">冷卻時間(毫秒)</param> /// <param name="slowRate">減慢程度(1為原速度的50%</param> public SkillBulletTime(int costEnergy, int costEnergyPerSec, int channeled, int cooldown, float slowRate) { Status = SkillStatus.Disabled; CostEnergy = costEnergy; CostEnergyPerSec = costEnergyPerSec; Channeled = new CounterObject(channeled); Cooldown = new CounterObject(cooldown); SlowRate = slowRate; }
/// <summary> /// 使用繪製物件和移動物件建立基本活動物件 /// </summary> /// <param name="drawObject">繪製物件</param> /// <param name="moveObject">移動物件</param> public ObjectBase(DrawBase drawObject, MoveBase moveObject) { Layout = new LayoutSet(); Status = ObjectStatus.Alive; League = LeagueType.None; Life = new CounterObject(-1); Propertys = new PropertyCollection(); DrawObject = drawObject; MoveObject = moveObject; }
/// <summary> /// 新增散彈技能 /// </summary> /// <param name="bulletCount">散彈數量</param> /// <param name="attackPower">殺傷力</param> /// <param name="costEnergy">耗費能量</param> /// <param name="cooldown">冷卻時間(毫秒)</param> public SkillShotgun(int bulletCount, int attackPower, int radiation, int costEnergy, int cooldown) { Status = SkillStatus.Disabled; BulletCount = bulletCount; AttackPower = attackPower; Radiation = radiation; CostEnergy = costEnergy; Cooldown = new CounterObject(cooldown); Channeled = new CounterObject(-1); }
/// <summary> /// 新增衝擊波技能,擊退周圍物件 /// </summary> /// <param name="costEnergy">耗費能量</param> /// <param name="costEnergyPerSec">每秒耗費能量</param> /// <param name="channeled">最大引導時間(毫秒)</param> /// <param name="cooldown">冷卻時間(毫秒)</param> /// <param name="pushSycle">釋放周期(毫秒)</param> /// <param name="pushPower">擊退力量</param> /// <param name="range">擊退範圍</param> public SkillShockwave(int costEnergy, int costEnergyPerSec, int channeled, int cooldown, int pushSycle, int pushPower, int range) { Status = SkillStatus.Disabled; CostEnergy = costEnergy; CostEnergyPerSec = costEnergyPerSec; Channeled = new CounterObject(channeled); Cooldown = new CounterObject(cooldown); PushSycle = new CounterObject(pushSycle); PushPower = pushPower; Range = range; }
/// <summary> /// 新增碎裂特性,擁有此特性的物件每回合會在原位置產生四散的炸彈 /// </summary> /// <param name="duration">持續時間(毫秒),小於0為永久</param> /// <param name="buildTime">生產週期(毫秒)</param> /// <param name="bombCount">每回合產生炸彈數量</param> /// <param name="bombWidth">炸彈寬度</param> /// <param name="bombHeight">炸彈高度</param> /// <param name="bombSpeedMax">炸彈移動速度最大值</param> /// <param name="bombSpeedMin">炸彈移動速度最小值</param> /// <param name="bombLifeMax">炸彈生命週期最大值</param> /// <param name="bombLifeMin">炸彈生命週期最小值</param> public PropertyBomber(int duration, int buildTime, int bombCount, int bombWidth, int bombHeight, int bombSpeedMin, int bombSpeedMax, int bombLifeMin, int bombLifeMax) { BuildTime = new CounterObject(buildTime); DurationTime.Limit = duration; BombCount = bombCount; BombWidth = bombWidth; BombHeight = bombHeight; BombSpeedMax = bombSpeedMax; BombSpeedMin = bombSpeedMin; BombLifeMax = bombLifeMax; BombLifeMin = bombLifeMin; BreakAfterDead = false; }
/// <summary> /// 新增碎裂特性,擁有此特性的物件每回合會在原位置產生四散的碎片 /// </summary> /// <param name="duration">持續時間(毫秒),小於0為永久</param> /// <param name="buildTime">生產週期(毫秒)</param> /// <param name="scrapCount">每回合產生碎片數量</param> /// <param name="scrapWidth">碎片寬度</param> /// <param name="scrapHeight">碎片高度</param> /// <param name="scrapSpeedMax">碎片移動速度最大值</param> /// <param name="scrapSpeedMin">碎片移動速度最小值</param> /// <param name="scrapLifeMax">碎片生命週期最大值</param> /// <param name="scrapLifeMin">碎片生命週期最小值</param> public PropertyScraping(int duration, int buildTime, int scrapCount, int scrapWidth, int scrapHeight, int scrapSpeedMin, int scrapSpeedMax, int scrapLifeMin, int scrapLifeMax) { BuildTime = new CounterObject(buildTime); DurationTime.Limit = duration; ScrapCount = scrapCount; ScrapWidth = scrapWidth; ScrapHeight = scrapHeight; ScrapSpeedMax = scrapSpeedMax; ScrapSpeedMin = scrapSpeedMin; ScrapLifeMax = scrapLifeMax; ScrapLifeMin = scrapLifeMin; BreakAfterDead = false; }
/// <summary> /// 新增崩塌特性且使用所有者顏色,擁有此特性的物件死亡時會逐漸縮小並碎裂 /// </summary> /// <param name="buildTime">產生碎片週期(毫秒)</param> /// <param name="scrapCount">每回合產生碎片數量</param> /// <param name="shrinkTime">縮小時間(毫秒)</param> /// <param name="scrapWidth">碎片寬度</param> /// <param name="scrapHeight">碎片高度</param> /// <param name="deadType">符合指定的死亡方式才會觸發</param> /// <param name="scrapSpeedMax">碎片移動速度最大值</param> /// <param name="scrapSpeedMin">碎片移動速度最小值</param> /// <param name="scrapLifeMax">碎片生命週期最大值</param> /// <param name="scrapLifeMin">碎片生命週期最小值</param> public PropertyDeadCollapse(int scrapCount, int shrinkTime, int buildTime, int scrapWidth, int scrapHeight, ObjectDeadType deadType, int scrapSpeedMin, int scrapSpeedMax, int scrapLifeMin, int scrapLifeMax) { DeadType = deadType; BuildTime = buildTime; ScrapCount = scrapCount; ScrapWidth = scrapWidth; ScrapHeight = scrapHeight; ShrinkTime = new CounterObject(shrinkTime); ScrapSpeedMax = scrapSpeedMax; ScrapSpeedMin = scrapSpeedMin; ScrapLifeMax = scrapLifeMax; ScrapLifeMin = scrapLifeMin; BreakAfterDead = false; }
/// <summary> /// 新增基本場景物件 /// </summary> public SceneBase() { SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); InitializeComponent(); SceneSlow = 1; DefaultCursor = Cursors.Default; IntervalOfRound = Global.DefaultIntervalOfRound; UIObjects = new ObjectCollection(this); EffectObjects = new EffectCollection(this); GameObjects = new ObjectCollection(this); DrawClearCount = new CounterObject(20); // 計次 RoundTimer.Tick += RoundTimer_Tick; }
/// <summary> /// 新增虛擬物件,會逐漸縮小直到消失 /// </summary> /// <param name="x">物件位置X</param> /// <param name="y">物件位置Y</param> /// <param name="baseWidth">原始寬度</param> /// <param name="baseHeight">原始高度</param> /// <param name="diffusionWidth">擴散寬度</param> /// <param name="diffusionHeight">擴散高度</param> /// <param name="diffusionTime">擴散時間(毫秒)</param> /// <param name="fadeTime">消失時間(毫秒)</param> /// <param name="drawObject">繪製物件</param> /// <param name="moveObject">移動物件</param> public ObjectWave(float x, float y, int baseWidth, int baseHeight, int diffusionWidth, int diffusionHeight, int diffusionTime, int fadeTime, DrawBase drawObject, MoveBase moveObject) : base(drawObject, moveObject) { Layout.CollisonShape = ShapeType.Ellipse; Layout.Anchor = DirectionType.Center; Layout.X = x; Layout.Y = y; Layout.Width = baseWidth; Layout.Height = baseHeight; BaseWidth = baseWidth; BaseHeight = baseHeight; BaseOpacity = 1; DiffusionWidth = diffusionWidth; DiffusionHeight = diffusionHeight; DiffusionOpacity = 1; FadeOpacity = 1; DiffusionTime = new CounterObject(diffusionTime); FadeTime = new CounterObject(fadeTime); }
public DrawBall(int amimation) { Animation = new CounterObject(amimation); }
/// <summary> /// 建立蛙行移動物件,依規律時間移動 /// </summary> /// <param name="target">追蹤目標</param> /// <param name="weight">阻力,最終移動速度會受到此值影響(finalSpeed = speeed/Weight)</param> /// <param name="speed">移動速度,決定每個移動調整值的最大距離</param> /// <param name="offsetsLimit">移動調整值列表最大數量</param> public MoveFrog(ITargetability target, float weight, float speed, int offsetsLimit, int moveTime) : base(target, weight, speed, offsetsLimit) { _MoveTime = new CounterObject(moveTime); }
/// <summary> /// 新增碰撞特性,擁有此特性的物件十分接近的人時會增加分數 /// </summary> /// <param name="skipTime">連續檢測間格時間</param> public PropertySmallTouch(int skipTime) { _SkipTime = new CounterObject(skipTime, skipTime); }
/// <summary> /// 場景關卡等級資訊 /// </summary> /// <param name="sceneID">場景ID</param> /// <param name="level">關卡等級</param> /// <param name="playingTime">遊戲時間限制(毫秒)</param> public ScenePlayingInfo(string sceneID, int level, int playingTime) { PlayingTime = new CounterObject(playingTime, 0, false); SceneID = sceneID; Level = level; }