commit
4d6735b2a9
3 changed files with 137 additions and 0 deletions
@ -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…
Reference in new issue