There is a file for each level called triggers.map
[1]
x=92
y=59
ClearTile=-78,-54
ClearAttribute=0,0
PlaySound=wall.wav
The values mean:
- TriggerId
- Trigger x position
- Trigger y position
- Function to call and parameters
Then there is class called TTriggerDispatcher which contains all possible methods to be called, for instance:
procedure TTriggerDispatcher.PlaySound(aX, aY: integer; const aName: string); begin TSoundDispatcher.Instance.Play('Sound\' + aName); end; procedure TTriggerDispatcher.SpawnEntity(aX, aY, aOfsX, aOfsY, aEntity: integer); var info: TMapInfo; entity: ISprite; begin info := TMapInfo.Create((aX + aOfsX) * FLayer.XTileSize, (aY + aOfsY) * FLayer.YTileSize, NO_TILE, aEntity); entity := TSpriteFactory.Instance.New(info); (entity as IWarp).Warp; end;
The way that this is handled is via rtti:
procedure TGameTrigger.Invoke; var info : TRttiType; method: TRttiMethod; params: TArray<TValue>; context: TRttiContext; par, i: integer; begin if FTarget = '' then raise Exception.Create('Invalid target'); context := TRttiContext.Create; info := context.GetType(TTriggerDispatcher); method := info.GetMethod(FTarget); if method = '' then raise Exception.Create(FTarget + ' does not exists'); Setlength(params, FParams.Count + 2); params[0] := TValue.From<integer>(FX); params[1] := TValue.From<integer>(FY); for i := 0 to FParams.Count - 1 do begin if TryStrToInt(FParams[i], par) then params[i + 2] := TValue.From<integer>(par) else params[i + 2] := TValue.From<string>(FParams[i]) end; method.Invoke(TTriggerDispatcher.Instance, params); end;
From the map editor one can design some game logic. All files should be at skydrive
BB)
- If no animation assigned in TAnimationSprite then the old exception is no longer happening
- TCollisionMatrix no longer returns the same sprite repeated
- New trigger system
- Triggers can dispatch more than one method
- Map load/saves triggers
- New balls enemy
- New trigger entity
- New music for level no name
- CrushWalls fixed
- When hero is finishing a level, immunity is activated
- Possible triggers at the moment are: clear and set tiles and attributes, play sound and music and spawn entities
- When in water and bubbles are shown and new sound is played
- Triggers used in some levels
No comments:
Post a Comment