Changeset 2583 for 2011/31


Ignore:
Timestamp:
2011-08-05 11:59:38 (8 years ago)
Author:
alkivima
Message:

Talletus.

Location:
2011/31/AleksiK
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • 2011/31/AleksiK/WorkingTitle/WorkingTitle/Peli.cs

    r2561 r2583  
    3030    Image[] auto1Ampuu = LoadImages("PunAuto", "PunAutoAmpuu", "PunAuto", "PunAutoAmpuu", "PunAuto"); 
    3131    Image[] auto2Ampuu = LoadImages("SinAuto", "SinAutoAmpuu", "SinAuto", "SinAutoAmpuu", "SinAuto"); 
    32     Image kiwi = LoadImage("tiili"); 
     32     
     33    Image kiwi1 = LoadImage("punpyl"); 
     34    Image kiwi2 = LoadImage("sinpyl"); 
    3335 
    3436    Image rapa = LoadImage("mud"); 
     37    Image rapas = LoadImage("muds"); 
    3538 
    3639    Image kentta = LoadImage("sand"); 
     
    229232            Smoke kura = new Smoke(); 
    230233            kura.ParticleImage = rapa; 
     234            kura.MaxScale = 0.7; 
    231235            kura.Position = auto1.Position + Vector.FromLengthAndAngle(25, (auto1.Angle + Angle.FromDegrees(180))); 
    232236            kura.MaximumLifetime = new TimeSpan(0, 0, 0, 2, 0); 
     
    236240            Add(kura); 
    237241 
    238             Flame liekki = new Flame(liekinkuva); 
    239             //, 25, Vector.FromLengthAndAngle(25,(auto1.Angle + Angle.FromDegrees(180)))); 
    240             liekki.Position = auto1.Position + Vector.FromLengthAndAngle(0, (auto1.Angle + Angle.FromDegrees(180))); 
    241             liekki.Angle = auto1.Angle + Angle.FromDegrees(180); 
    242             liekki.Width = 0.5; 
    243             liekki.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 50); 
    244             liekki.MaxScale = 0.01; 
    245             Add(liekki, -1); 
     242            //Flame liekki = new Flame(liekinkuva); 
     243            ////, 25, Vector.FromLengthAndAngle(25,(auto1.Angle + Angle.FromDegrees(180)))); 
     244            //liekki.Position = auto1.Position + Vector.FromLengthAndAngle(0, (auto1.Angle + Angle.FromDegrees(180))); 
     245            //liekki.Angle = auto1.Angle + Angle.FromDegrees(180); 
     246            //liekki.Width = 0.5; 
     247            //liekki.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 50); 
     248            //liekki.MaxScale = 0.01; 
     249            //Add(liekki, -1); 
    246250 
    247251        } 
     
    250254        { 
    251255            Smoke kura1 = new Smoke(); 
    252             kura1.ParticleImage = rapa; 
     256            kura1.ParticleImage = rapas; 
     257            kura1.MaxScale = 0.7; 
    253258            kura1.Position = auto2.Position + Vector.FromLengthAndAngle(25, (auto2.Angle + Angle.FromDegrees(180))); 
    254259            kura1.MaximumLifetime = new TimeSpan(0, 0, 0, 2, 0); 
     
    273278 
    274279 
    275         PhysicsObject maata = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    276         maata.Shape = Shape.Rectangle; 
    277         maata.Color = Color.DarkGray; 
    278         maata.X = 0; 
    279         maata.Y = 0; 
    280         maata.Restitution = 0.2; 
    281         maata.Tag = "pylvas"; Add(maata, -1); 
    282  
    283         maata.Angle = Angle.FromDegrees(330.0); 
    284  
    285         PhysicsObject pylvas1 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    286         pylvas1.Shape = Shape.Rectangle; 
    287         pylvas1.X = -200; 
    288         pylvas1.Y = 270; 
     280        //PhysicsObject maata = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     281        //maata.Shape = Shape.Circle; 
     282        //maata.Color = Color.DarkGray; 
     283        //maata.X = 0; 
     284        //maata.Y = 0; 
     285        //maata.Restitution = 0.2; 
     286        //maata.Tag = "pylvas"; Add(maata, -1); 
     287 
     288        //maata.Angle = Angle.FromDegrees(330.0); 
     289 
     290        PhysicsObject pylvas1 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     291        pylvas1.Shape = Shape.Circle; 
     292        pylvas1.X = -100; 
     293        pylvas1.Y = 0; 
    289294        pylvas1.Restitution = 0.2; 
    290295        pylvas1.Tag = "pylvas"; 
     
    292297        Add(pylvas1, -1); 
    293298 
    294         pylvas1.Angle = Angle.FromDegrees(150.0); 
    295  
    296         PhysicsObject pylvas2 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    297         pylvas2.Shape = Shape.Rectangle; 
    298         pylvas2.X = -330; 
    299         pylvas2.Y = 175; 
     299        pylvas1.Angle = Angle.FromDegrees(100.0); 
     300 
     301        PhysicsObject pylvas2 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     302        pylvas2.Shape = Shape.Circle; 
     303        pylvas2.X = -300; 
     304        pylvas2.Y = 200; 
    300305        pylvas2.Restitution = 0.2; 
    301306        pylvas2.Tag = "pylvas"; 
     
    305310        pylvas2.Angle = Angle.FromDegrees(200.0); 
    306311 
    307         PhysicsObject pylvas3 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    308         pylvas3.Shape = Shape.Rectangle; 
    309         pylvas3.X = -350; 
    310         pylvas3.Y = -110; 
     312        PhysicsObject pylvas3 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     313        pylvas3.Shape = Shape.Circle; 
     314        pylvas3.X = -300; 
     315        pylvas3.Y = -200; 
    311316        pylvas3.Restitution = 0.2; 
    312317        pylvas3.Tag = "pylvas"; 
     
    316321        pylvas3.Angle = Angle.FromDegrees(130.0); 
    317322 
    318         PhysicsObject pylvas4 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    319         pylvas4.Shape = Shape.Rectangle; 
    320         pylvas4.X = 250; 
    321         pylvas4.Y = -200; 
     323        PhysicsObject pylvas4 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     324        pylvas4.Shape = Shape.Circle; 
     325        pylvas4.X = 100; 
     326        pylvas4.Y = 0; 
    322327        pylvas4.Restitution = 0.2; 
    323328        pylvas4.Tag = "pylvas"; 
     
    327332        pylvas4.Angle = Angle.FromDegrees(200.0); 
    328333 
    329         PhysicsObject pylvas5 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    330         pylvas5.Shape = Shape.Rectangle; 
    331         pylvas5.X = -275; 
    332         pylvas5.Y = -270; 
     334        PhysicsObject pylvas5 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     335        pylvas5.Shape = Shape.Circle; 
     336        pylvas5.X = 300; 
     337        pylvas5.Y = -200; 
    333338        pylvas5.Restitution = 0.2; 
    334339        pylvas5.Tag = "pylvas"; 
     
    338343        pylvas5.Angle = Angle.FromDegrees(40.0); 
    339344 
    340         PhysicsObject pylvas6 = PhysicsObject.CreateStaticObject(150.0, 50.0); 
    341         pylvas6.Shape = Shape.Rectangle; 
    342         pylvas6.X = 325; 
    343         pylvas6.Y = 222; 
     345        PhysicsObject pylvas6 = PhysicsObject.CreateStaticObject(100.0, 100.0); 
     346        pylvas6.Shape = Shape.Circle; 
     347        pylvas6.X = 300; 
     348        pylvas6.Y = 200; 
    344349        pylvas6.Restitution = 0.2; 
    345350        pylvas6.Tag = "pylvas"; 
     
    352357        vasenReuna.Restitution = 0.3; 
    353358        vasenReuna.IsVisible = true; 
    354         vasenReuna.Image = raja; 
     359        //vasenReuna.Image = raja; 
    355360 
    356361        oikeaReuna = Level.CreateRightBorder(); 
    357362        oikeaReuna.Restitution = 0.3; 
    358363        oikeaReuna.IsVisible = true; 
    359         oikeaReuna.Image = raja; 
     364        //oikeaReuna.Image = raja; 
    360365 
    361366        PhysicsObject ylaReuna = Level.CreateTopBorder(); 
    362367        ylaReuna.Restitution = 0.3; 
    363368        ylaReuna.IsVisible = true; 
    364         ylaReuna.Image = raja; 
     369        //ylaReuna.Image = raja; 
    365370 
    366371        PhysicsObject alaReuna = Level.CreateBottomBorder(); 
    367372        alaReuna.Restitution = 0.3; 
    368373        alaReuna.IsVisible = true; 
    369         alaReuna.Image = raja; 
    370  
    371         Level.BackgroundColor = Color.ForestGreen; 
     374        //alaReuna.Image = raja; 
     375 
     376        Level.BackgroundColor = Color.DarkGray; 
    372377 
    373378        Level.Background.Image = kentta; 
     
    375380        Camera.X = 0.0; 
    376381        Camera.Y = 0.0; 
    377         Camera.ZoomFactor = 1.1; 
    378  
    379         pylvas1.Image = kiwi; 
    380         pylvas2.Image = kiwi; 
    381         pylvas3.Image = kiwi; 
    382         pylvas4.Image = kiwi; 
    383         pylvas5.Image = kiwi; 
    384         pylvas6.Image = kiwi; 
    385         maata.Image = kiwi; 
     382        Camera.ZoomFactor = 1.0 
     383; 
     384 
     385        pylvas1.Image = kiwi1; 
     386        pylvas2.Image = kiwi1; 
     387        pylvas3.Image = kiwi1; 
     388        pylvas4.Image = kiwi2; 
     389        pylvas5.Image = kiwi2; 
     390        pylvas6.Image = kiwi2; 
     391        //maata.Image = ; 
    386392 
    387393    } 
     
    452458        { 
    453459            MessageDisplay.Add("Punainen Voitti!"); 
    454             MessageDisplay.TextColor = Color.Pink; 
    455             MessageDisplay.X = 560.0; 
    456             MessageDisplay.Y = 470.0; 
     460            MessageDisplay.TextColor = Color.Red; 
     461            MessageDisplay.X = 100.0; 
     462            MessageDisplay.Y = 360.0; 
    457463 
    458464        } 
     
    460466        { 
    461467            MessageDisplay.Add("Sininen Voitti!"); 
    462             MessageDisplay.TextColor = Color.Cyan; 
    463             MessageDisplay.X = 565.0; 
    464             MessageDisplay.Y = 520.0; 
     468            MessageDisplay.TextColor = Color.DarkCyan; 
     469            MessageDisplay.X = 700.0; 
     470            MessageDisplay.Y = 360.0; 
    465471        } 
    466472 
     
    502508        } 
    503509 
    504         if (auto2.Velocity.Magnitude > auto1.Velocity.Magnitude) 
    505         { 
    506             voimaMittari1.Value -= 5; 
    507         } 
     510        //if (auto2.Velocity.Magnitude > auto1.Velocity.Magnitude) 
     511        //{ 
     512        //    voimaMittari1.Value -= 5; 
     513        //} 
    508514    } 
    509515    void KasitteleAuto2Tormays(PhysicsObject auto2, PhysicsObject kohde) 
     
    515521        } 
    516522 
    517         if (auto1.Velocity.Magnitude > auto2.Velocity.Magnitude) 
    518         { 
    519             voimaMittari2.Value -= 5; 
    520         } 
     523        //if (auto1.Velocity.Magnitude > auto2.Velocity.Magnitude) 
     524        //{ 
     525        //    voimaMittari2.Value -= 5; 
     526        //} 
    521527    } 
    522528    void LisaaLaskurit() 
    523529    { 
    524         pelaajan1Pisteet = LuoPisteLaskuri(-605.0, 150.0); 
     530        pelaajan1Pisteet = LuoPisteLaskuri(-100.0, 0.0); 
    525531        pelaajan1Pisteet.UpperLimit += delegate { Voitto(auto1); }; 
    526         pelaajan2Pisteet = LuoPisteLaskuri(605.0, 150.0); 
     532        pelaajan2Pisteet = LuoPisteLaskuri(100.0, 0.0); 
    527533        pelaajan2Pisteet.UpperLimit += delegate { Voitto(auto2); }; 
    528534    } 
     
    535541        naytto.X = x; 
    536542        naytto.Y = y; 
    537         naytto.TextColor = Color.White; 
     543        naytto.TextColor = Color.DarkGray; 
    538544        Add(naytto); 
    539545        return laskuri; 
     
    598604            voikoPelaaja1Heittaa = false; 
    599605            Grenade kranu = new Grenade(0.7); 
    600             kranu.FuseTime = TimeSpan.FromSeconds(0.3); 
    601             kranu.ExplosionRadius = 100; 
    602             kranu.ExplosionForce = 300; 
    603             kranu.ExplosionSpeed = 500; 
     606            kranu.FuseTime = TimeSpan.FromSeconds(0.4); 
     607            kranu.ExplosionRadius = 125; 
     608            kranu.ExplosionForce = 3000; 
     609            kranu.ExplosionSpeed = 200; 
    604610            kranu.MaximumLifetime = TimeSpan.FromSeconds(1); 
    605611            Add(kranu); 
    606612            kranu.Position = auto.Position + Vector.FromLengthAndAngle(35, (auto.Angle + Angle.FromDegrees(180))); 
    607613            kranu.Angle = auto.Angle + Angle.FromDegrees(180); 
    608             Vector heittoVoima = Vector.FromLengthAndAngle(6000, (auto.Angle + Angle.FromDegrees(180))); 
     614            Vector heittoVoima = Vector.FromLengthAndAngle(10000, (auto.Angle + Angle.FromDegrees(180))); 
    609615            kranu.Hit(heittoVoima); 
    610616 
     
    623629            voikoPelaaja2Heittaa = false; 
    624630            Grenade kranu = new Grenade(0.7); 
    625             kranu.FuseTime = TimeSpan.FromSeconds(0.3); 
    626             kranu.ExplosionRadius = 100; 
    627             kranu.ExplosionForce = 300; 
    628             kranu.ExplosionSpeed = 500; 
     631            kranu.FuseTime = TimeSpan.FromSeconds(0.4); 
     632            kranu.ExplosionRadius = 125; 
     633            kranu.ExplosionForce = 3000; 
     634            kranu.ExplosionSpeed = 200; 
    629635            kranu.MaximumLifetime = TimeSpan.FromSeconds(1); 
    630636            Add(kranu); 
    631637            kranu.Position = auto.Position + Vector.FromLengthAndAngle(35, (auto.Angle + Angle.FromDegrees(180))); 
    632638            kranu.Angle = auto.Angle + Angle.FromDegrees(180); 
    633             Vector heittoVoima = Vector.FromLengthAndAngle(6000, (auto.Angle + Angle.FromDegrees(180))); 
     639            Vector heittoVoima = Vector.FromLengthAndAngle(10000, (auto.Angle + Angle.FromDegrees(180))); 
    634640            kranu.Hit(heittoVoima); 
    635  
     641             
    636642            if (kranu != null) 
    637643            { 
     
    639645                AddCollisionHandler(kranu, KranaattiOsui); 
    640646            } 
    641             Timer.SingleShot(2.0, delegate { voikoPelaaja1Heittaa = true; }); 
     647            Timer.SingleShot(2.0, delegate { voikoPelaaja2Heittaa = true; }); 
    642648        } 
    643649    } 
     
    663669        if (kohde == auto1) 
    664670        { 
    665             voimaMittari1.Value -= 10; 
     671            voimaMittari1.Value -= 20; 
    666672            return; 
    667673        } 
    668674        if (kohde == auto2) 
    669675        { 
    670             voimaMittari2.Value -= 10; 
     676            voimaMittari2.Value -= 20; 
    671677            return; 
    672678        } 
     
    751757        MessageDisplay.Add("Start!"); 
    752758        MessageDisplay.TextColor = Color.White; 
    753         MessageDisplay.X = 610.0; 
    754         MessageDisplay.Y = 500.0; 
     759        MessageDisplay.X = 490.0; 
     760        MessageDisplay.Y = 350.0; 
    755761        ajastin.Stop(); 
    756762        ajastin.Reset(); 
  • 2011/31/AleksiK/WorkingTitle/WorkingTitle/WorkingTitle.csproj.Debug.cachefile

    r2561 r2583  
    1010Content\mud.xnb 
    1111Content\sand.xnb 
    12 Content\tiili.xnb 
    1312Content\stone.xnb 
    1413Content\panos.xnb 
     14Content\sinpyl.xnb 
     15Content\punpyl.xnb 
     16Content\muds.xnb 
  • 2011/31/AleksiK/WorkingTitle/WorkingTitle/obj/x86/Debug/WorkingTitle.csproj.FileListAbsolute.txt

    r2561 r2583  
    1818C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\mud.xnb 
    1919C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\sand.xnb 
    20 C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\tiili.xnb 
    2120C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\stone.xnb 
    2221C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\panos.xnb 
     22C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\sinpyl.xnb 
     23C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\punpyl.xnb 
     24C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\muds.xnb 
  • 2011/31/AleksiK/WorkingTitle/WorkingTitle/obj/x86/Debug/cachefile-{5BE16854-838A-4380-8B3A-3416305E4ECD}-targetpath.txt

    r2561 r2583  
    1010Content\mud.xnb 
    1111Content\sand.xnb 
    12 Content\tiili.xnb 
    1312Content\stone.xnb 
    1413Content\panos.xnb 
     14Content\sinpyl.xnb 
     15Content\punpyl.xnb 
     16Content\muds.xnb 
  • 2011/31/AleksiK/WorkingTitle/WorkingTitleContent/WorkingTitleContent.contentproj

    r2561 r2583  
    107107  </ItemGroup> 
    108108  <ItemGroup> 
    109     <Compile Include="tiili.png"> 
    110       <Name>tiili</Name> 
    111       <Importer>TextureImporter</Importer> 
    112       <Processor>TextureProcessor</Processor> 
    113     </Compile> 
    114   </ItemGroup> 
    115   <ItemGroup> 
    116109    <Compile Include="stone.png"> 
    117110      <Name>stone</Name> 
     
    134127    </Compile> 
    135128  </ItemGroup> 
     129  <ItemGroup> 
     130    <Compile Include="sinpyl.png"> 
     131      <Name>sinpyl</Name> 
     132      <Importer>TextureImporter</Importer> 
     133      <Processor>TextureProcessor</Processor> 
     134    </Compile> 
     135  </ItemGroup> 
     136  <ItemGroup> 
     137    <Compile Include="punpyl.png"> 
     138      <Name>punpyl</Name> 
     139      <Importer>TextureImporter</Importer> 
     140      <Processor>TextureProcessor</Processor> 
     141    </Compile> 
     142  </ItemGroup> 
     143  <ItemGroup> 
     144    <Compile Include="muds.png"> 
     145      <Name>muds</Name> 
     146      <Importer>TextureImporter</Importer> 
     147      <Processor>TextureProcessor</Processor> 
     148    </Compile> 
     149  </ItemGroup> 
    136150  <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" /> 
    137151  <!--  To modify your build process, add your task inside one of the targets below and uncomment it.  
  • 2011/31/AleksiK/WorkingTitle/WorkingTitleContent/obj/x86/Debug/ContentPipeline.xml

    r2561 r2583  
    3636      <Options>None</Options> 
    3737      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\rajahdysEsimerkki.xnb</Output> 
    38       <Time>2011-08-04T09:49:56.6794183+03:00</Time> 
     38      <Time>2011-08-05T11:50:10.1108419+03:00</Time> 
    3939    </Item> 
    4040    <Item> 
     
    9090      <Options>None</Options> 
    9191      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\mud.xnb</Output> 
    92       <Time>2011-08-02T13:03:27.7284859+03:00</Time> 
     92      <Time>2011-08-05T10:36:19.2728779+03:00</Time> 
    9393    </Item> 
    9494    <Item> 
     
    9999      <Options>None</Options> 
    100100      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\sand.xnb</Output> 
    101       <Time>2011-08-03T11:54:55.3961155+03:00</Time> 
    102     </Item> 
    103     <Item> 
    104       <Source>tiili.png</Source> 
    105       <Name>tiili</Name> 
    106       <Importer>TextureImporter</Importer> 
    107       <Processor>TextureProcessor</Processor> 
    108       <Options>None</Options> 
    109       <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\tiili.xnb</Output> 
    110       <Time>2011-08-03T10:24:50.3425567+03:00</Time> 
     101      <Time>2011-08-05T10:34:40.7872423+03:00</Time> 
    111102    </Item> 
    112103    <Item> 
     
    126117      <Options>None</Options> 
    127118      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\panos.xnb</Output> 
    128       <Time>2011-08-04T14:37:29.8365679+03:00</Time> 
     119      <Time>2011-08-05T11:58:01.9137559+03:00</Time> 
     120    </Item> 
     121    <Item> 
     122      <Source>sinpyl.png</Source> 
     123      <Name>sinpyl</Name> 
     124      <Importer>TextureImporter</Importer> 
     125      <Processor>TextureProcessor</Processor> 
     126      <Options>None</Options> 
     127      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\sinpyl.xnb</Output> 
     128      <Time>2011-08-05T09:50:12.8312179+03:00</Time> 
     129    </Item> 
     130    <Item> 
     131      <Source>punpyl.png</Source> 
     132      <Name>punpyl</Name> 
     133      <Importer>TextureImporter</Importer> 
     134      <Processor>TextureProcessor</Processor> 
     135      <Options>None</Options> 
     136      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\punpyl.xnb</Output> 
     137      <Time>2011-08-05T09:50:21.7063315+03:00</Time> 
     138    </Item> 
     139    <Item> 
     140      <Source>muds.png</Source> 
     141      <Name>muds</Name> 
     142      <Importer>TextureImporter</Importer> 
     143      <Processor>TextureProcessor</Processor> 
     144      <Options>None</Options> 
     145      <Output>C:\MyTemp\AleksiK\WorkingTitle\WorkingTitle\bin\x86\Debug\Content\muds.xnb</Output> 
     146      <Time>2011-08-05T11:11:10.2058915+03:00</Time> 
    129147    </Item> 
    130148    <BuildSuccessful>true</BuildSuccessful> 
Note: See TracChangeset for help on using the changeset viewer.