Skip to content

Commit

Permalink
screens4: revision2013 changes
Browse files Browse the repository at this point in the history
+ Slide type (good/evil) and default slide
+ GDI resource leak fix in Win32 image loader
+ Fixed Siegmeister bar placement for PM7 renderer
+ MIDI note trigger for single slides
  • Loading branch information
kebby committed Jun 27, 2013
1 parent 4d826f6 commit 751a1cc
Show file tree
Hide file tree
Showing 10 changed files with 818 additions and 744 deletions.
9 changes: 5 additions & 4 deletions altona_wz4/wz4/screens4/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# directories
cache
dist
sounds
# directories
cache
dist
sounds
backup
4 changes: 4 additions & 0 deletions altona_wz4/wz4/screens4/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class Config
sF32 MovieVolume;
sPoolString SlidePrefix;
sPoolString TransPrefix;
sPoolString DefaultType;

sInt MidiDevice;
sInt MidiChannel;
Expand All @@ -71,6 +72,7 @@ class Config
MovieVolume = 1.0;
SlidePrefix = L"slide";
TransPrefix = L"trans";
DefaultType = L"";
MidiDevice = -1;
MidiChannel = 1;
PngOut = L"";
Expand Down Expand Up @@ -148,6 +150,8 @@ class Config
Scan->ScanString(SlidePrefix);
else if (Scan->IfName(L"transprefix"))
Scan->ScanString(TransPrefix);
else if (Scan->IfName(L"defaulttype"))
Scan->ScanString(DefaultType);
else if (Scan->IfName(L"mididevice"))
MidiDevice = Scan->ScanInt();
else if (Scan->IfName(L"midichannel"))
Expand Down
5 changes: 3 additions & 2 deletions altona_wz4/wz4/screens4/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ defaults
resolution 640,360 // if missing, use desktop resolution
fullscreen 0 // fullscreen (0 or 1)

//slideprefix "tum12slide" // prefix of slide renderer ops in the wz4 file (fallback is "slide")
//slideprefix "rvn13slide" // prefix of slide renderer ops in the wz4 file (fallback is "slide")
//slideprefix "besoffen" // prefix of slide renderer ops in the wz4 file (fallback is "slide")
//transprefix "kotz"
//defaulttype "good1"

mididevice -1 // used midi device; (-1 means all)
midichannel 1 // midi channel for sending events (1..16)

//pngout "c:\test\frame.png" // save current slide as png to this path
}

Expand Down
Binary file added altona_wz4/wz4/screens4/config_wz4
Binary file not shown.
79 changes: 68 additions & 11 deletions altona_wz4/wz4/screens4/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,14 +239,51 @@ class MyApp : public sApp

struct RenderList
{
sArray<sAutoPtr<Wz4Render>*> List;

struct Entry
{
sString<256> Name;
sAutoPtr<Wz4Render> * Ptr;
sInt Temp;
};

sArray<Entry> List;
sRandomMarkov *Random;
sBool MyRandom;

sAutoPtr<Wz4Render> GetNext()
sAutoPtr<Wz4Render> GetNext(const sChar *prefix)
{
if (List.IsEmpty()) return 0;
return *(List[Random->Get()]);

if (prefix==0 || !prefix[0])
return *(List[Random->Get()].Ptr);

// find slides for prefix
int plen = sGetStringLen(prefix);
int count = List.GetCount();
int good = 0;
for (int i=0; i<count; i++)
{
List[i].Temp = sCmpStringILen(List[i].Name,prefix,plen)?0:1;
good += List[i].Temp;
}

// none found? try default, and if that doesn't work, random
if (good==0)
{
if (prefix != MyConfig->DefaultType)
return GetNext(MyConfig->DefaultType);
else // already default? well.
return GetNext(0);
}

// now use the random until you get one that's ok to use
for (;;)
{
int rnd = Random->Get();
if (List[rnd].Temp)
return *(List[rnd].Ptr);
}
}

void Init(const sChar *prefix, const sChar *type, wOp *input, sRandomMarkov *random)
Expand All @@ -265,7 +302,12 @@ class MyApp : public sApp
{
if (!sCmpStringILen(realprefix,op->Name,len))
{
List.AddTail(new sAutoPtr<Wz4Render>((Wz4Render*)Doc->CalcOp(MakeCall(op->Name,input))));
Entry e;
e.Ptr = new sAutoPtr<Wz4Render>((Wz4Render*)Doc->CalcOp(MakeCall(op->Name,input)));
const sChar *rawname = ((const sChar *)op->Name)+len;
if (rawname[0]=='_') rawname++;
e.Name = rawname;
List.AddTail(e);
}
}
if (!sCmpString(prefix,L"slide")) break;
Expand All @@ -290,7 +332,9 @@ class MyApp : public sApp

~RenderList()
{
sDeleteAll(List);
for (int i=0; i<List.GetCount(); i++)
delete List[i].Ptr;
List.Clear();
if (MyRandom)
sDelete(Random);
}
Expand Down Expand Up @@ -455,17 +499,17 @@ class MyApp : public sApp
case IMAGE:
if (ns->ImgOpaque)
{
NextSlide = e->OpaquePic.GetNext();
NextSlide = e->OpaquePic.GetNext(ns->RenderType);
if (NextSlide.IsNull())
NextSlide = e->Pic.GetNext();
NextSlide = e->Pic.GetNext(ns->RenderType);
}
else
NextSlide = e->Pic.GetNext();
NextSlide = e->Pic.GetNext(ns->RenderType);
break;
case SIEGMEISTER_BARS:
case SIEGMEISTER_WINNERS:
{
NextSlide = e->Siegmeister.GetNext();
NextSlide = e->Siegmeister.GetNext(ns->RenderType);
RNSiegmeister *node = GetNode<RNSiegmeister>(L"Siegmeister",NextSlide);
node->DoBlink = (ns->Type == SIEGMEISTER_WINNERS);
node->Fade = node->DoBlink?1:0;
Expand All @@ -479,7 +523,7 @@ class MyApp : public sApp
} break;
case VIDEO:
{
NextSlide = e->CustomFS.GetNext();
NextSlide = e->CustomFS.GetNext(ns->RenderType);
sRelease(e->Movie);
e->Movie = ns->Movie;
ns->Movie = 0; // claim ownership
Expand Down Expand Up @@ -592,6 +636,8 @@ class MyApp : public sApp
Entry[1]->Movie->SetVolume(MyConfig->MovieVolume);

PngOutEvent->Signal();

//sMemMark(false);
}

void Load()
Expand Down Expand Up @@ -713,6 +759,7 @@ class MyApp : public sApp

void SendMidiEvent(sInt ev, sInt v1, sInt v2)
{
sDPrintF(L"send midi %s %s %s\n", ev, v1, v2);
sInt start = MyConfig->MidiDevice; if (start==-1) start=0;
sInt end = MyConfig->MidiDevice+1; if (end==0) end=100;
for (int i=start; i<end && sMidiHandler->GetDeviceName(sTRUE,i); i++)
Expand Down Expand Up @@ -806,7 +853,7 @@ class MyApp : public sApp
}
{
// current movie player ended?
if (TransTime<00 && Entry[1]->Movie && !Entry[1]->Movie->IsPlaying())
if (TransTime<0 && Entry[1]->Movie && !Entry[1]->Movie->IsPlaying())
{
doneId = CurId;
}
Expand All @@ -831,6 +878,15 @@ class MyApp : public sApp
SetTransition(RndTrans.Get(),newslide->TransitionTime);
else
SetTransition(newslide->TransitionId,newslide->TransitionTime);

if (newslide->MidiNote>0 && CurRenderTime > 5)
{
Config::Note note;
note.Pitch = newslide->MidiNote;
note.Velocity = 127;
note.Duration = 1.0f;
SendMidiNote(note);
}
}
else
{
Expand Down Expand Up @@ -1055,6 +1111,7 @@ void sMain()
sAddMidi(sTRUE, sTRUE);

sGetMemHandler(sAMF_HEAP)->MakeThreadSafe();
sGetMemHandler(sAMF_HEAP)->IncludeInSnapshot = sTRUE;

sArray<sDirEntry> dirlist;
sString<1024> wintitle;
Expand Down
Loading

0 comments on commit 751a1cc

Please sign in to comment.