init commit

master
soul2 3 years ago
commit 4d6735b2a9
  1. 24
      broadcast2.j
  2. 53
      struct/broadcast.j
  3. 60
      struct/line.j

@ -0,0 +1,24 @@
library broadcast2 initializer InitBroadcast2
/**
* 播片系统
* 为剧情设计
* 当前版本仅涉及文本显示对话功能
*
* 版本: 2.01
* By Soul2
*/
#define SayPointX 0.62
#define SayPointY - 0.5
#include "struct/broadcast.j"
#undef SayPointX
#undef SayPointY
function InitBroadcast2 takes nothing returns nothing
// init something
endfunction
endlibrary

@ -0,0 +1,53 @@
#include "line.j"
struct Broadcast
timer recorder
real progress
real tick
integer progressLine
Line array lines[100]
integer lineLength = 0
string name
static method create takes string name returns thistype
local thistype b = thistype.allocate()
set b.name = name
set b.lineLength = 0
set b.recorder = null
set b.progress = 0
set b.progressLine = 0
return b
endmethod
method getLength takes nothing returns integer
return this.lineLength
endmethod
method add takes Line line returns thistype
set this.lines[this.lineLength] = line
set this.lineLength = this.lineLength + 1
return this
endmethod
method ready takes real tick returns thistype
set this.recorder = CreateTimer()
set this.tick = tick
return this
endmethod
method nextTick takes nothing returns real
if this.getLength() == 0 then
return - 4000 // 当前播片没有台词,立即结束
endif
if this.progress >= this.lines[this.progressLine].begin then
call this.lines[this.progressLine].say()
set this.progressLine = this.progressLine + 1
if this.progressLine >= this.getLength() then
return - 2000 // 播片台词播放完毕
endif
endif
set this.progress = this.progress + this.tick
return this.progress // 正常运行返回当前播片进度
endmethod
endstruct

@ -0,0 +1,60 @@
struct Line
unit speaker
string speakerName
string content
integer begin
integer end
integer enemy
static method create takes integer begin, integer end returns thistype
local thistype l = thistype.allocate()
set l.begin = begin
set l.end = end
return l
endmethod
method foe takes nothing returns thistype
set this.enemy = 1
return this
endmethod
method setSpeak takes string speakerName, string content returns thistype
set this.speakerName = speakerName
set this.content = content
return this
endmethod
method setSpeak2 takes unit speaker, string content returns thistype
set this.speaker = speaker
set this.content = content
return this
endmethod
method getSpeaker takes integer enemy returns string
local string color = "|cff00ff00"
if enemy == 1 then
set color = "|cffff4000"
endif
if this.speaker != null then
if IsUnitType(this.speaker, UNIT_TYPE_HERO) then
return color + GetHeroProperName(this.speaker) + "|r"
else
return color + GetUnitName(this.speaker) + "|r"
endif
else
return color + this.speakerName + "|r"
endif
endmethod
method say takes nothing returns thistype
local string speaker = this.getSpeaker(this.enemy)
call DisplayTimedTextToPlayer(Player(0), SayPointX, SayPointY, this.getDuration(), speaker + ": " + this.content)
return this
endmethod
method getDuration takes nothing returns real
return I2R(this.end - this.begin)
endmethod
endstruct
Loading…
Cancel
Save